//renxuanyiren dfs:
// jiantu:dang yij==1 shi, zai xij he i zhijian lianxian;
// bianlitu zhidaoyudao yij=0,huisu;
#include<bits/stdc++.h>
using namespace std;
struct zhouba{
int yij[1010];
int xij[1010];
int total;
int id;
} dict[1010];
bool biaoj[1010];
int cnt=1;
void dfs(zhouba n,int shenru,int qianqu[]){//shenru=1
biaoj[n.id]=true;//fangzhi zihuan
for(int i=1;i<=n.total;i++){
if(n.yij[i]==1&&!biaoj[n.xij[i]]){
cnt++;
//cout << n.xij[i] <<" ";
qianqu[shenru]=n.id;
dfs(dict[n.xij[i]],shenru+1,qianqu);
}
if(n.yij[i]==0){
for(int j=1;j<=shenru;j++){
if(n.xij[i]==qianqu[j]){
cnt=0;
return;}
}
}
//jiarutepan if nideqianqu shuo ni 1, ni shuo ta 0, qianhoumaodun
}
return ;
}
int main(){
int n;
cin >> n;
for(int i=1;i<=n;i++){
int k;
cin >> k;
dict[i].id=i;
dict[i].total=k;
for(int j=1;j<=k;j++){
cin >> dict[i].xij[j] >> dict[i].yij[j];
}
}
int iaxn=-110000;
for(int i=1;i<=n;i++){
int qianqu[1010];
dfs(dict[i],1,qianqu);
iaxn=max(cnt,iaxn);
cnt=1;
memset(biaoj,0,sizeof(biaoj));
memset(qianqu,0,sizeof(qianqu));
}
cout << iaxn <<endl;
return 0;
}
麻烦问一下这个为啥WA
思路:从任何一个人开始dfs,代表相信那个人会拥有多少个诚实的人,最后求max