我就好奇为什么别人wa是错误,而我是太短
查看原帖
我就好奇为什么别人wa是错误,而我是太短
271023
H_F_lenz楼主2020/7/26 14:28
#include<bits/stdc++.h>
using namespace std;
int m,n,p=0,ans=0,w[1000002]={0},head[1000002]={0},Next[2000004]={0},ver[2000004],tot=0,d[1000010]={0},f[1000005]={0},sum=0;
void add(int a,int b)
{
	ver[++tot]=b;
	Next[tot]=head[a];
	head[a]=tot;
} 
struct k
{
	int x;
	int y;
}a[100010];
bool cmp(k p,k q)
{
	return p.x>q.x||(p.x==q.x&&p.y>q.y);
}
void dfs(int x)
{
	sum++;
	if(sum==1)
	cout<<x;
	else
	cout<<" "<<x;
	for(int i=head[x];i;i=Next[i])
	{
		int y=ver[i];
		if(f[y]==0)
		{
			f[y]=1;
			dfs(y);
		}
	}
	return ;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&a[i].x,&a[i].y);
	}
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=m;i++)
	{
		add(a[i].x,a[i].y);
	}
	for(int i=1;i<=n;i++)
	if(f[i]==0)
	{
		f[i]=1;
		dfs(i);
	}
	cout<<endl;
	for(int j=1;j<=n;j++)
	{
		if(w[j]==0)
		{
		w[j]=1;
		queue <int> q;
		q.push(j);
		while(q.size())
		{
		    int x=q.front();
		    q.pop();
		    cout<<x<<" ";
		    for(int i=head[x];i;i=Next[i])
			{
			    int y=ver[i];
				if(w[y]==0)
				{
				 	w[y]=1;
				    q.push(y);
				}
			}
		}
	    }
	}
	return 0;
}
2020/7/26 14:28
加载中...