60分求助
查看原帖
60分求助
893608
cx2021ghj楼主2024/10/18 13:16
#include<bits/stdc++.h>
using namespace std;
struct ghj{
	__int128 sum,a,b;
};
__int128 n,m,t[400005],s[400005],x,k;
vector<__int128> g[400005];
void bfs(__int128 x){
	queue<ghj> q;
	q.push({x,1,1});
	while(q.size()){
		ghj u=q.front();
		q.pop();
		if(g[u.sum].size()==0){
			if(t[u.sum]==0){
				t[u.sum]=u.a;
				s[u.sum]=u.b;
			}
			else{
				int vv=u.b*s[u.sum]/__gcd(u.b,s[u.sum]);
				t[u.sum]=vv/s[u.sum]*t[u.sum]+u.a*vv/u.b;
				s[u.sum]=vv;
			}
		}
		for(int i=0;i<g[u.sum].size();i++)
			q.push({g[u.sum][i],1,g[u.sum].size()*u.b});
	}
}
inline void read(__int128 &s){
    s=0;
    char c=' ';
    while(c>'9'||c<'0') c=getchar();
    while(c>='0'&&c<='9'){
        s=s*10+c-'0';
        c=getchar();
    }
}
void write(__int128 x){
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
signed main(){
	read(n),read(m);
	for(__int128 i=1;i<=n;i++){
		read(x);
		while(x--){
			read(k);
			g[i].push_back(k);
		}
	}
	for(__int128 i=1;i<=m;i++) bfs(i);
	for(__int128 i=1;i<=n;i++)
		if(g[i].size()==0){
			write(t[i]/__gcd(t[i],s[i]));
			cout<<" ";
			write(s[i]/__gcd(t[i],s[i]));
			puts("");
		}
}

快读快写都加了,int128也开了,就是不知道哪里错了,各位dalao帮忙看看

2024/10/18 13:16
加载中...