正确代码:
#include<bits/stdc++.h>
using namespace std;
const int N(3e5 + 7);
int t, n, m, k, u, v, z, cnt, d[N], ans[N];
vector<pair<int, int> > e[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while(t --) {
cin >> n >> m >> k;
for(int i = 1; i <= n; ++ i) {
e[i].clear();
}
cnt = 0;
bool flag = false;
memset(d, -1, sizeof d);
for(int i = 1; i <= m; ++ i) {
cin >> u >> v;
ans[i] = 2;
e[u].push_back({v, i});
}
d[1] = 0;
queue<int> q;
q.push(1);
while(q.size()) {
u = q.front();
q.pop();
for(auto i : e[u]) {
v = i.first, z = i.second;
if(~d[v]) {
if(d[v] == d[u] + 1) {
flag = true;
}
continue;
}
d[v] = d[u] + 1;
ans[z] = 1;
q.push(v);
}
}
if(k == 1 && flag) {
cout << "No\n";
continue;
}
cout << "Yes\n";
for(int i = 1; i <= m; ++ i) {
cout << ans[i] << ' ';
}
cout << '\n';
}
return 0;
}
错误代码:
using namespace std;
const int N(3e5 + 7);
int t, n, m, k, u, v, z, cnt, d[N], ans[N];
vector<pair<int, int> > e[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while(t --) {
cin >> n >> m >> k;
for(int i = 1; i <= n; ++ i) {
e[i].clear();
}
cnt = 0;
bool flag = false;
memset(d, -1, sizeof d);
for(int i = 1; i <= m; ++ i) {
cin >> u >> v;
ans[i] = 2;
e[u].push_back({v, i});
}
d[1] = 0;
queue<int> q;
q.push(1);
while(q.size()) {
u = q.front();
q.pop();
for(auto i : e[u]) {
v = i.first, z = i.second;
if(~d[v]) {
if(d[v] == d[u] + 1) {
flag = true;
}
continue;
}
d[v] = d[u] + 1;
ans[z] = 1;
q.push(v);
}
}
if(k == 1 && flag) {
cout << "No\n";
continue;
}
cout << "Yes\n";
for(int i = 1; i <= m; ++ i) {
if(k == 1 && ans[i] == 2) {
return -1;
}
cout << ans[i] << ' ';
}
cout << '\n';
}
return 0;
}
调了我老久……