题解:CF2056B Find the Permutation
拓扑排序模板题。
用
void sol(){
int n;
cin>>n;
for (int i=1;i<=n;i++){
deg[i]=0;
p[i].clear();
for (int j=1;j<=n;j++){
char c;
cin>>c;
a[i][j]=c-'0';
}
}
for (int i=1;i<=n;i++){
for (int j=i+1;j<=n;j++){
if (a[i][j]) p[i].pb(j),deg[j]++;
else p[j].pb(i),deg[i]++;
}
}
queue<int> q;
for (int i=1;i<=n;i++) if (!deg[i]) q.push(i);
while (!q.empty()){
int u=q.front();
q.pop();
cout<<u<<' ';
for (int v:p[u]){
if (!(--deg[v])) q.push(v);
}
}
cout<<endl;
}