貌似百度没题解
贪心是贪不过的,举个例子
5 4 10
1 2 2
2 4 3
3 4 2
4 5 3
还有注意不连通情况
1 #include<iostream> 2 #include<sstream> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<string> 6 #include<cstring> 7 #include<algorithm> 8 #include<functional> 9 #include<iomanip> 10 #include<numeric> 11 #include<cmath> 12 #include<queue> 13 #include<vector> 14 #include<set> 15 #include<map> 16 #include<cctype> 17 const double PI = acos(-1.0); 18 const int INF = 0x3f3f3f3f; 19 const int NINF = -INF - 1; 20 const int maxn = 1e5 + 5; 21 typedef long long ll; 22 #define MOD 1000000007 23 using namespace std; 24 int n, m, st; 25 int vis[maxn]; 26 int rec = 0; 27 typedef pair<int, int> P; 28 struct node 29 { 30 int next, cost; 31 int flag; 32 }; 33 vector<node> G[maxn]; 34 void bfs() 35 { 36 queue<P> q; 37 q.push(P(1, st)); 38 while(q.size()) 39 { 40 P p = q.front(); 41 q.pop(); 42 for(int i = 0; i < G[p.first].size(); ++i) 43 { 44 node tmp = G[p.first][i]; 45 int mp; 46 if(!tmp.flag) mp = p.second - tmp.cost; 47 else mp = p.second + tmp.cost; 48 if (vis[tmp.next] == -1) { 49 vis[tmp.next] = mp; 50 q.push(P(tmp.next, vis[tmp.next])); 51 } 52 else{ 53 if(vis[tmp.next] != mp) { 54 rec = 1; 55 break; 56 } 57 } 58 } 59 if(rec) break; 60 } 61 } 62 int main() 63 { 64 memset(vis, -1, sizeof(vis)); 65 scanf("%d %d %d", &n, &m, &st); 66 for(int i = 0; i < m; ++i) 67 { 68 int x, y, w; 69 scanf("%d %d %d", &x, &y, &w); 70 G[x].push_back(node{y, w, 0}); 71 G[y].push_back(node{x, w, 1}); 72 } 73 vis[1] = st; 74 bfs(); 75 for(int i = 1; i <= n; ++i) 76 { 77 if(vis[i] == -1) 78 { 79 rec = 1; 80 break; 81 } 82 } 83 if(rec) 84 { 85 cout << "QAQ"; 86 } 87 else 88 { 89 cout << "QWQ" << endl; 90 for(int i = 1; i <= n; ++i) 91 { 92 cout << vis[i] << endl; 93 } 94 } 95 return 0; 96 }