求助,20pts
查看原帖
求助,20pts
519986
Luxe877楼主2023/8/11 07:48

样例在本地输入可以正常输出,但是交上去后只会输出1,有木有大佬能帮忙找错

#include<bits/stdc++.h>
using namespace std;
int n,p;
vector<int> tr[302];
int depth[302];
bool vis[302];
int ans=0;
int dfs(int x)//dfs求子节点个数
{
	depth[x]=1;
	for(int i=0;i<tr[x].size();i++)
	{
		depth[x]+=dfs(tr[x][i]);
	}
	return depth[x];
}
queue<int> q;
void bfs()//广搜模拟传染和控制
{
	while(q.size())
	{
		int a=q.front();
		q.pop();
		ans++;
		int cnt=0,tmp=0;
		vis[a]=true;
		for(int i=0;i<tr[a].size();i++)
		{
			if(depth[tr[a][i]]>cnt)//找到子节点个数最多的并封锁路线
			{
				tmp=tr[a][i];
				cnt=depth[tr[a][i]];
			}
		}
		vis[tmp]=true;
		for(int i=0;i<tr[a].size();i++)
		{
			if(!vis[tr[a][i]])//模拟传染
			{
				q.push(tr[a][i]);
			}
		}
	}
}
int main()
{
	cin>>n>>p;
	memset(depth,0,sizeof(depth));
	int x,y;
	for(int i=1;i<=p;i++)
	{
		cin>>x>>y;
		tr[x].push_back(y);
	}
	dfs(1);
	memset(vis,false,sizeof(vis));
	q.push(1);
	bfs();
	cout<<ans;
	return 0;
}

2023/8/11 07:48
加载中...