社区讨论
关于__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 条回复,欢迎继续交流。
正在加载回复...