【Lv:3】
- 注册
- 2020/05/09
- 消息
- 19
- 金粒
- 4,819金粒
呃呃呃
[MD]
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
const int INF = 0x3f3f3f;
vector<pair<int, int> > g[N];
int d[N], cnt[N];
bool vis[N];
int main(){
int n, m, s;
scanf("%d %d %d", &n, &m, &s);
for(int i = 0; i < m; i++) {
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
g.push_back({v, w});
}
for(int i = 1; i <= n; i++) {
vis = false;
d = INF;
cnt = 0;
}
d = 0;
queue<int> q;
q.push(s);
bool flag = false;
while(q.size()) {
int u = q.front();
q.pop();
vis = false;
for(auto i : g) {
int v = i.first, w = i.second;
if(d[v] > d + w){
d[v] = d + w;
cnt[v]++;
if(cnt[v] > n) flag = true;
if(!vis[v]){
vis[v] = true;
q.push(v);
}
}
}
}
if(flag) printf("ERROR!\n");
else for(int i=1;i<=n;i++) printf("%d ", d);
return 0;
}
```
[/MD]
[MD]
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
const int INF = 0x3f3f3f;
vector<pair<int, int> > g[N];
int d[N], cnt[N];
bool vis[N];
int main(){
int n, m, s;
scanf("%d %d %d", &n, &m, &s);
for(int i = 0; i < m; i++) {
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
g.push_back({v, w});
}
for(int i = 1; i <= n; i++) {
vis = false;
d = INF;
cnt = 0;
}
d
queue<int> q;
q.push(s);
bool flag = false;
while(q.size()) {
int u = q.front();
q.pop();
vis = false;
for(auto i : g) {
int v = i.first, w = i.second;
if(d[v] > d + w){
d[v] = d + w;
cnt[v]++;
if(cnt[v] > n) flag = true;
if(!vis[v]){
vis[v] = true;
q.push(v);
}
}
}
}
if(flag) printf("ERROR!\n");
else for(int i=1;i<=n;i++) printf("%d ", d);
return 0;
}
```