求助大佬
查看原帖
求助大佬
497332
利姆露·三上悟楼主2022/5/19 20:45
#include<bits/stdc++.h>
using namespace std;
int head[10000],nxt[10000],ver[10000],dian[10000];
int n,m,rd[10000],cd[1000],tot,fz[10000],fm[10000];
void mp(int x,int y)
{
	nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;
}
void cs(int x)
{
	if(cd[x]!=0)fm[x]*=cd[x];
	for(int i=head[x];i;i=nxt[i])
	{
		//cout<<"now:"<<ver[i]<<endl;
		//cout<<"before zi:"<<fz[ver[i]]<<" mu:"<<fm[ver[i]]<<endl;
		if(fm[ver[i]]==1)
		{
			//cout<<"1"<<endl;
			fm[ver[i]]=fm[x];
		}
		
		else if(fm[ver[i]]==fm[x])
		{
			//cout<<"2"<<endl;
			fz[ver[i]]+=fz[x];
			int gcd=__gcd(fz[ver[i]],fm[ver[i]]);
			fz[ver[i]]/=gcd;fm[ver[i]]/=gcd;
		}
		
		else
		{
			//cout<<"3"<<endl;
			fz[ver[i]]=fz[ver[i]]*fm[x]+fz[x]*fm[ver[i]];
			fm[ver[i]]*=fm[x];
			int gcd=__gcd(fz[ver[i]],fm[ver[i]]);
			fz[ver[i]]/=gcd;fm[ver[i]]/=gcd;
		}
		//cout<<"after zi:"<<fz[ver[i]]<<" mu:"<<fm[ver[i]]<<endl;
		cs(ver[i]);
		
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int k;cin>>k;cd[i]=k;
		for(int j=1;j<=k;j++)
		{
			int h;
			cin>>h;rd[h]++;
			mp(i,h);
		}
	}
	for(int i=1;i<=n;i++)fz[i]=fm[i]=1;
	for(int i=1;i<=n;i++)
	{
		if(rd[i]==0)
		{
			cs(i);
			//cout<<"!"<<fm[i]<<endl;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(cd[i]==0)cout<<fz[i]<<" "<<fm[i]<<endl;
	}
}

WA+RE,被折磨了一整个晚上了QWQ

2022/5/19 20:45
加载中...