以下是本蒟蒻的AC代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N=510;
int n,x,m,y,a[N],din[N];
bool vis[N];
vector<int>g[N],st;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",a+i,&m);
vis[a[i]]=true;
while(m--){
scanf("%d",&y);
g[x].push_back(y);
din[y]++;
}
}
queue<int>q;
for(int i=1;i<=n;i++)
if(!din[a[i]])q.push(a[i]);
while(!q.empty()){
int k=q.front();
q.pop(),st.push_back(k);
for(auto i:g[k])
if(--din[i]==0)q.push(i);
}
if(st.size()==n)puts("YES");
else printf("%d",n-st.size());
return 0;
}
据观察发现,在输入时,while(m--)中,我写的是g[x].push_back(y),但是实际上我没有输入x,也就是说这一行代码等价于g[0].push_back(y),但得了满分,很显然,这是错的
然而,当我改为g[a[i]].push_back(y)且不改后面时,我得了70分。
非常离谱,建议加强数据