RT
#include<bits/stdc++.h>
using namespace std;
long long n,m,p[100009],q[100009],vis[100009],pipe[100009];
vector<long long> d[100009],end,start;
queue<long long> Q;
long long gcd(long long a,long long b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
void add(long long i,long long fenzi,long long fenmu)
{
long long a=p[i],b=q[i],c=fenzi,e=fenmu;
long long fenmu2=b*e,fenzi2=a*e+b*c;
long long temp=fenmu2;
fenmu2/=gcd(fenmu2,fenzi2);
fenzi2/=gcd(temp,fenzi2);
p[i]=fenzi2;
q[i]=fenmu2;
}
void divide(long long i)
{
long long fenzi3=p[i],fenmu3=q[i]*d[i].size();
long long tmp1=fenzi3,tmp2=fenmu3;
fenzi3/=gcd(tmp1,tmp2);
fenmu3/=gcd(tmp1,tmp2);
for(long long j=0;j<d[i].size();j++)
{
add(d[i][j],fenzi3,fenmu3);
// cout<<"第"<<d[i][j]<<"个结点流入"<<fenzi3<<"/"<<fenmu3<<"吨污水"<<endl;
}
p[i]=0;
q[i]=1;
}
void solve()
{
while(!Q.empty())
{
long long t=Q.front();
Q.pop();
if(d[t].size()) divide(t);
for(long long i=0;i<d[t].size();i++) Q.push(d[t][i]);
}
for(long long i=0;i<end.size();i++) cout<<p[end[i]]<<" "<<q[end[i]]<<endl;
}
int main()
{
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
cin>>n>>m;
for(long long i=1;i<=n;i++)
{
p[i]=0;
q[i]=1;
}
for(long long i=1;i<=n;i++)
{
cin>>pipe[i];
for(long long j=1;j<=pipe[i];j++)
{
long long qqqq;
cin>>qqqq;
d[i].push_back(qqqq);
vis[qqqq]=1;
}
if(pipe[i]==0) end.push_back(i);
}
for(long long i=1;i<=n;i++)
if(!vis[i]) {start.push_back(i);p[i]=q[i]=1;Q.push(i);}
solve();
// divide(1);
// for(long long i=0;i<start.size();i++) cout<<start[i]<<" ";
// cout<<endl;
// for(long long i=0;i<end.size();i++) cout<<end[i]<<" ";
return 0;
}
为什么爆零