社区讨论

关于__int128(悬关)

灌水区参与者 7已保存回复 31

讨论操作

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

当前回复
29 条
当前快照
1 份
快照标识符
@lor3bpe2
此快照首次捕获于
2023/11/09 19:13
2 年前
此快照最后确认于
2023/11/09 22:13
2 年前
查看原帖
bdfs了用法,但是网上都说写了快读快写就能直接用。 然后我写了P7113 [NOIP2020] 排水系统。一下是我的代码:
CPP
#include<bits/stdc++.h>
#define int __int128
using namespace std;
int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}
void write(int x){
	if(x<0){printf("-");x=-x;}	
	write(x/10);
	printf("%d",x%10-'0');
}
int gcd(int x,int y){
    if(x==0) return y;
    return gcd(x%y,x);
}
int n,M;
vector<int>e[100005];
struct node
{
	int m,s;
}a[100005],ans[100005];
void add(node x,node y){
	int bb=gcd(a[x].m,a[y].m);
	a[x].m=a[x].m*a[y].m/bb;
	a[x].s=a[x].s*(a[x].m/bb)+a[y].s*(a[y].m/bb);
	int bbb=gcd(a[x].m,a[x].s);
	a[x].m/=bbb,a[x].s/=bbb;
}
void dfs(int x){
	if(e[x].size()==0){
	int bb=gcd(ans[x].m,a[x].m);
	ans[x].m=ans[x].m*a[x].m/bb;
	ans[x].s=ans[x].s*(ans[x].m/bb)+a[y].s*(a[x].m/bb);
	int bbb=gcd(ans[x].m,ans[x].s);
	ans[x].m/=bbb,ans[x].s/=bbb;
	return;	 
	}
	for(int i=0;i<e[x].size();i++){
		int y=e[x][i];
		dfs(y);
		add(a[x],a[y]);
	}
}
signed main(){
	n=read(),M=read();
	for(int i=1;i<=n;i++){
		int d=read();
		for(int j=1;j<=d;j++){
		int aa=read();
		e[i].push_back(aa);
		}
	}
	for(int i=1;i<=M;i++){
		for(int j=1;j<=n;j++) a[j].m=1,a[j].s=0;
		a[i].m=1,a[i].s=1;
		dfs(i);
	}
	for(int i=1;i<=n;i++){
		if(ans[i].s){
		write(ans[i].s);
		printf(" ");
		write(ans[i].m);
		puts("");	
		}
	}
	return 0;
}
它从 int read()就开始报错,我调了很久但还是报错。所以 __int128 到底怎么用,然后我的代码怎么改才能用 __int128。

回复

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

正在加载回复...