#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<iomanip> #include<cstdlib> #include<cstdio> #include<vector> #include<algorithm> #include<cmath> #include<map> using namespace std; const int INF = 10001; struct Edge { int from; int to; int wgt; Edge(int f = -1, int t = -1, int w = INF) : from(f), to(t), wgt(w){} }; bool bellmanford(vector<Edge> &G, int num, int src) { vector<int> dist(num+1, INF); dist[src] = 0; int st; for (st = 0; st < num; ++st) { bool chg = false; for (int i = 0; i < G.size(); ++i) { if (dist[G[i].to] > dist[G[i].from] + G[i].wgt) { dist[G[i].to] = dist[G[i].from] + G[i].wgt; chg = true; } } if (!chg) break; } if (st == num) return true; else return false; } int main(void) { int F; cin >> F; while (F--) { int N, M, W; cin >> N >> M >> W; vector<Edge> G; for (int i = 0; i < M; ++i) { int s, e, t; scanf("%d%d%d", &s, &e, &t); G.push_back(Edge(s, e, t)); G.push_back(Edge(e, s, t)); } for (int i = 0; i < W; ++i) { int s, e, t; scanf("%d%d%d", &s, &e, &t); G.push_back(Edge(s, e, -t)); } if (bellmanford(G, N, 1)) cout << "YES" << endl; else cout << "NO" << endl; } //system("pause"); return 0; }
如果用STL做邻接矩阵的话会超时,内存申请释放开销太大.而且题目中<span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">N</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> (1 ≤ </span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">N</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> ≤ 500), <span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">M</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> (1 ≤ </span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">M</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> ≤ 2500), <span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">W</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> (1 ≤ </span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;">W</span><span style="font-family: 'Times New Roman', Times, serif; font-size: 16px;"> ≤ 200) 明显为稀疏图,如果用邻接矩阵表示的话,搜索的开销也会很大.于是考虑储存边的信息.</span></span></span>
时间: 2024-10-01 02:25:38