社区讨论

开了__int128 依旧90pts 求调

P7113[NOIP2020] 排水系统参与者 3已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@mmim82l3
此快照首次捕获于
2026/03/09 11:22
昨天
此快照最后确认于
2026/03/09 20:20
17 小时前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
vector<int> a[100005];
int zhong[100005],cnt=0;
int du[100005];
int n,m;
__int128 dfz[100005],dfm[100005];
void print(__int128 num){
	if(num>9){
		print(num/10);
	}
	putchar(num%10+'0');
}
queue<int> q;
void bfs(){
	for(int i=1;i<=m;i++){
		q.push(i);
		dfm[i]=1;
		dfz[i]=1;
	}
	while(!q.empty()){
//		printf("1");
		int x=q.front();
		q.pop();
		__int128 fz=dfz[x];
		__int128 fm=dfm[x];
		if(!a[x].size()){
			continue;
		}
		long long len=a[x].size();
		if(fz%len==0){
			fz/=len;
		}
		else{
			fm*=len;
		}
		for(auto y:a[x]){
			if(dfm[y]==0){
				dfm[y]=fm;
	 			dfz[y]=fz;
			}
			else{
				__int128 gong=dfm[y]/__gcd(dfm[y],fm)*fm;
				dfz[y]=(dfz[y]*(gong/dfm[y]))+(fz*(gong/fm));
				dfm[y]=gong;
				__int128 gong1=__gcd(dfz[y],dfm[y]);
				dfz[y]/=gong1;
				dfm[y]/=gong1;
			}
			du[y]--;
			if(!du[y]){
				q.push(y);
			}
		}
	}
}
int main(){
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		if(x==0){
			zhong[++cnt]=i;
		}
		for(int j=1;j<=x;j++){
			int y;
			scanf("%d",&y);
			a[i].push_back(y);
			du[y]++;
		}
	}
	bfs(); 
	for(int i=1;i<=cnt;i++){
		int x=zhong[i];
		long long fz=dfz[x],fm=dfm[x];
		if(fm==0){
			printf("0 0\n");
			continue;
		}
		__int128 gong=__gcd(fz,fm);
		fz/=gong;
		fm/=gong;
		print(fz);
		printf(" ");
		print(fm);
		printf("\n");
	}
	return 0;
}

回复

14 条回复,欢迎继续交流。

正在加载回复...