今天写代码 程序显示
[Error] ld returned 1 exit status
过了一会
他自己好了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define int long long
int n,a[2005][2005],ans[2005],ct;
using namespace std;
int head[800005],ver[800005],Next[800005],tot=1;
void add(int x,int y){
ver[++tot]=y,Next[tot]=head[x],head[x]=tot;
}
int stack_[2005],dfn[2005],low[2005],cnt,top,inq[2005],cntt;
int inv[2005];
void tarjan(int x){
dfn[x]=low[x]=++cnt;
stack_[++top]=x;
inq[x]=1;
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
if(!dfn[y]) {
tarjan(y);
low[x]=min(low[x],low[y]);
}
if(inq[y])
low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x]){
++cntt;
while(1){
inq[stack_[top]]=0;
inv[stack_[top]]=cntt;
top--;
if(stack_[top+1]==x) break;
}
}
}
inline void write(int x) {
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
inline void clear(){
cnt=cntt=top=ct=0;
tot=1;
memset(a,0,sizeof(a));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(inq,0,sizeof(inq));
memset(inv,0,sizeof(inv));
}
signed main(){
while(scanf("%d",&n)!=-1){
clear();
scanf("%d",&n);
for(int i=1;i<=n;i++){
int k;
scanf("%d",&k);
ct=0;
for(int j=1;j<=k;j++){
cin>>a[i][++ct];
add(i,a[i][ct]+n);
}
}
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
add(x+n,i);
}
for(int i=1;i<=n;i++)
if(!dfn[i]) tarjan(i);
for(int i=1;i<=n;i++){
int bb=1,num=0;
while(a[i][bb]){
if(inv[a[i][bb]+n]==inv[i])
ans[++num]=a[i][bb];
bb++;
}
sort(ans+1,ans+1+num);
write(num);
putchar(' ');
for(int j=1;j<=num;j++){
write(ans[j]);
putchar(' ');
}
cout<<endl;
}
}
return 0;
}
这是那份代码。
有没有大佬解决我的疑惑 qwq