求助
查看原帖
求助
1205484
litiyu楼主2024/8/27 11:26
//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

2024/8/27 11:26
加载中...