__int128 加了,还是没过,求调
#include<bits/stdc++.h>
#define i128 __int128
#define int long long
using namespace std;
inline void write(i128 x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
struct Fraction{
i128 p,q;
Fraction(int aa=0,int bb=1){
p=aa,q=bb;
yuefen();
}
void yuefen() {
int g=__gcd(p, q);
p/=g,q/=g;
}
Fraction operator+(Fraction b) {
return Fraction(p*b.q+b.p*q,q*b.q);
}
Fraction operator/(Fraction b) {
return Fraction(p*b.q,q*b.p);
}
}a[100001];
int n,m,indeg[100001],outdeg[100001];
vector<int>G[100001];
signed main(){
cin>>n>>m;
for(int u=1;u<=n;u++){
cin>>outdeg[u];
for(int v,i=1;i<=outdeg[u];i++){
cin>>v;
G[u].emplace_back(v),indeg[v]++;
}
}
queue<int>q;
for(int i=1;i<=n;i++)
if(!indeg[i])q.push(i),a[i]=Fraction(1,1);
while(!q.empty()){
int u=q.front();
q.pop();
for(int v:G[u]){
a[v]=a[v]+a[u]/outdeg[u];
if(--indeg[v]==0)q.push(v);
}
}
for(int i=1;i<=n;i++){
if(!outdeg[i])write(a[i].p),cout<<" ",write(a[i].q),cout<<"\n";
}
return 0;
}