次の 2 つの宣言があるとします。
vector<int> list[N];
と
vector<vector<int>> list;
list[1].push_back(2); を実行する理由 両方で動作しますか?理論的には、最初のものは 1 次元配列のようなもので、2 番目のものは 2 次元配列のようなものです。(間違っていたら訂正してください) ? しかし驚いたことに、 list[1].push_back(2) が両方で機能していることがわかりました。
誰がこれがどのように起こるのか説明できますか??
説明してください、よろしくお願いします
`
#include <cstdio>
#include <vector>
using namespace std;
int main(void) {
vector<int>g[100100];
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0,a,b;i<m&&2==scanf("%d%d",&a,&b);++i)g[a].push_back(b),g[b].push_back(a);
int s[100100]={0,1},v[100100]={0,1};
for(int u=0;;++u){
int a=s[u];
for(int i=g[a].size();i-->0;){
int b=g[a][i];
if(v[b]){
if(u-v[b]>=k){
printf("%d\n",u-v[b]+1);
for(int j=v[b];j<=u;++j)printf("%d ",s[j]);
return 0;
}
}
else{
s[v[b]=u+1]=b;
break;
}
}
}
}
`
このコードは、「K + 1」よりも長いサイクルの長さを見つけるために使用されます。私が取り組んでいた質問..サンプルの入力と出力で自分で確認できます
input
3 3 2
1 2
2 3
3 1
output
3
1 2 3