社区讨论

为什么快读反而超时,用scanf却过了?为什么???

P2052[NOI2011] 道路修建参与者 5已保存回复 7

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@loa0w7dl
此快照首次捕获于
2023/10/28 20:33
2 年前
此快照最后确认于
2023/11/02 11:00
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
#define N 1000050
#define il inline
#define vd void
#define tp template<typename T>
ll n,cnt,ans,size[N],head[N];
struct node{int w,to,nt;}e[N<<1];

tp il vd read(T &x){
	T w=1;char ch=getchar();x=0;
	while(!isdigit(ch)&&ch!='-')ch=getchar();
	if(ch=='-')w=-1,ch=getchar();
	while(isdigit(ch))x+=(x<<3)+(x<<1)+(ch^'0'),ch=getchar();
	x*=w;
}
il vd add(int x,int y,int z){
	e[++cnt].to=y;
	e[cnt].nt=head[x];
	e[cnt].w=z;
	head[x]=cnt;
}
il vd dfs(int x,int fa){
	size[x]=1;
	for(int i=head[x];i;i=e[i].nt){
		int to=e[i].to;
		if(fa==to) continue;
		dfs(to,x);
		size[x]+=size[to];
		ans+=e[i].w*abs(2*size[to]-n);
	}
} 
int main(){
	read(n);
	int x,y,z;
	for(int i=1;i<n;i++){
		read(x);read(y);read(z);
		add(x,y,z);add(y,x,z);
	}
	dfs(1,0);
	printf("%lld\n",ans);
	return 0;
}
为什么这会T,而用scanf不会T???

回复

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

正在加载回复...