求助 wa#15
查看原帖
求助 wa#15
672044
Graph_Theory楼主2023/11/4 12:53
#include <bits/stdc++.h>
using namespace std;
const int maxn=100005;
int sh[maxn],t,n,m,edgesum;
vector <int> edge[maxn];
bool vis[maxn],flagof1=0,book[maxn];
int sum[maxn],sums=0;
void dfs(int now)
{
	if(flagof1==1) return ;
	if(vis[now]==1)
	{
		flagof1=1;
		cout<<"-1";
cout<<" "<<now<<endl;
		return ;
	} 
	vis[now]=1;
	for(int i=0;i<edge[now].size();i++)
	{
		dfs(edge[now][i]);
cout<<" now "<< now <<"  dfs"<<edge[now][i]<<endl;
	}
	if(book[now]==0) 
	{
		book[now]=1;
		sum[++sums]=now;
	}
	return ;
}
int main()
{
	cin>>n>>t;
	for(int i=1;i<=t;i++)
		cin>>sh[i];
	for(int i=1;i<=n;i++)
	{ 
		int TT;
		cin>>TT;
		while(TT--)
		{
			int v;
			cin>>v;
			edge[i].push_back(v);
		}
//cout<<"size  "<<edge[i].size()<<endl;
	}
	for(int i=1;i<=t;i++)
	{
		if(flagof1==1) return 0;
		memset(vis,0,sizeof(vis));
		if(book[ sh[i] ]==0) dfs(sh[i]);//遍历每一个必修课
		if(flagof1==1) return 0;
	}	
	
	cout<<sums<<endl;
	for(int i=1;i<=sums;i++)
	{
		cout<<sum[i]<<" ";
	}
	return 0;
}
2023/11/4 12:53
加载中...