配列の要素の管理がうまくいかない(C++)
解決したいこと
https://atcoder.jp/contests/adt_easy_20240620_3/tasks/abc225_b
このリンク先のatcoderの問題についてです。
この問題に対し、一番下に示すコードを書きました。ただし次に示すように適切な結果が得られません。
得られる入力と出力
5
1 4
2 4
3 4
4 5
No
得たい入力と出力
5
1 4
2 4
3 4
4 5
Yes
そこで
cout << link[a][b] <<" " << link[b][a] << endl;
を追加し適切に各頂点間の辺の数が追加されているかを確認したところ、入出力が下のようになり、加算されていないことが分かりました(スペースが広いほうがcout~による出力です)。
現在のコードで得られる入出力
5
1 4
1 1
2 4
1 1
3 4
1 1
4 5
1 1
No
どこが問題なのかを教えていただきたいです。
作成したコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); ++i)
int main() {
int N,a,b;
cin >> N; // 頂点数
vector<vector<int>> link(N, vector<int>(N, 0));
rep(i,N-1) {//辺の数はN-1個
cin >> a >> b;//頂点a,b間
a--; b--;//頂点1~Nを頂点0~N-1にずらす
link[a][b]++;
link[b][a]++;
cout << link[a][b] <<" " << link[b][a] << endl;
if ((link[a][b] == N - 1) || (link[b][a] == N - 1)) {
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
次の様に修正し、通りました。
修正したコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); ++i)
int main() {
int N,a,b;
cin >> N; // 頂点数
vector<int> link(N-1);
rep(i,N-1) {//辺の数はN-1個
cin >> a >> b;//頂点a,b間
a--; b--;//頂点1~Nを頂点0~N-1にずらす
link[a]++;
link[b]++;
if ((link[a] == N - 1) || (link[b] == N - 1)) {
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
0