WA60pts求条
查看原帖
WA60pts求条
524369
netlify楼主2024/10/29 18:38

__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;
}
2024/10/29 18:38
加载中...