30pts,玄关
查看原帖
30pts,玄关
1367000
Ybll_楼主2024/10/8 15:16
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int sum,fz,fm;
};
int n,m,fz[100005],fm[100005];
vector<int>v[100005];
void bfs(int rj)
{
	queue<node>q;
	q.push({rj,1,1});
	while(q.size())
	{
		if(v[q.front().sum].size()==0)
		{
			if(fz[q.front().sum]==0)
			{
				fz[q.front().sum]=q.front().fz; 
				fm[q.front().sum]=q.front().fm; 
			}
			else
			{
				int a=q.front().fm*fm[q.front().sum]/__gcd(q.front().fm,fm[q.front().sum]);
				fz[q.front().sum]=a/fm[q.front().sum]*fz[q.front().sum]+q.front().fz*a/q.front().fm;
				fm[q.front().sum]=a;
			}
		}
		for(int i=0;i<v[q.front().sum].size();i++)
		{
			q.push({v[q.front().sum][i],1,v[q.front().sum].size()*q.front().fm});
		}
		q.pop();
	}
}
int main()
{
//    freopen("water.in","r",stdin);
 //   freopen("water.out","w",stdout);
  	cin>>n>>m;
  	for(int i=1;i<=n;i++)
  	{
  		int j;
  		cin>>j;
  		while(j--)
  		{
  			int k;
  			cin>>k;
  			v[i].push_back(k);
		}
	}
	for(int i=1;i<=m;i++)
	{
		bfs(i);
	}
	for(int i=1;i<=n;i++)
	{
		if(v[i].size()==0)cout<<fz[i]/__gcd(fz[i],fm[i])<<" "<<fm[i]/__gcd(fz[i],fm[i])<<"\n";
	}
	return 0;
}
2024/10/8 15:16
加载中...