灵异事件
查看原帖
灵异事件
752094
MornHus楼主2023/2/1 16:40

一看这么简单个题本来想水过,没想到出现了这么大的问题:

  • 计算出现随机趋势,也就是说里面的很多东西都完全乱了,输进去的很正常,输出来就是乱码。
  • 在洛谷在线IDE上也是这种问题。
  • 里面留了一些没注释的调试代码,别说没注释cout
  • 代码结构完全正常啊!别说什么写错了之类的真的就是灵异事件,我也没那个变量有什么操作,他就自己变了!而且每次输入一样的数据,给出来还是不一样的!就真的随机了
  • 我真的要崩溃了才来发帖,球球各位帮帮忙吧
#include<bits/stdc++.h>
using namespace std;
int read(){
	int x=0;
	char c=getchar();
	while(c>'9'||c<'0'){
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c-'0');
		c=getchar();
	}
	return x;
}
struct line{
	int to;
	long long ct1;
	long long ct2;
};
int n;
int a,b;
long long c1,c2;
long long ans;
long long p[200001];
vector<line>g[200001];
int f[200001][19];
int dep[200001];
void dfs(int now,int fa){
	dep[now]=dep[fa]+1;
	f[now][0]=fa;
	for(int i=1;i<=18;i++){
		f[now][i]=f[f[now][i-1]][i-1];
	}
	for(int i=0;i<g[now].size();i++){
		if(g[now][i].to==fa)continue;
		dfs(g[now][i].to,now);
	}
}
int lca(int u,int v){
	if(dep[u]<dep[v])swap(u,v);
	for(int i=18;i>=0;i--){
		if(f[u][i]&&dep[f[u][i]]>=dep[v]){
			u=f[u][i];
		}
	}
	if(u==v)return u;
	for(int i=18;i>=0;i--){
		if((f[u][i]&&f[v][i])&&f[u][i]!=f[v][i]){
			u=f[u][i];
			v=f[v][i];
		}
	}
	return f[u][0];
}
void work(int now){
	int fa;
	for(int i=0;i<g[now].size();i++){
		if(g[now][i].to!=f[now][0]){
			work(g[now][i].to);
			p[now]+=p[g[now][i].to];
		}else{
			fa=f[now][0];	
		}
	}
    if(g[now][fa].ct1 * p[now] <  g[now][fa].ct2) ans+=g[now][fa].ct1 * p[now];
	else ans+=g[now][fa].ct2;
    cout<<g[now][fa].ct1<<endl;
//	printf("%lld\n" , g[now][fa].cost1);
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		cin>>a>>b>>c1>>c2;
		g[a].push_back({b,c1,c2});
		g[b].push_back({a,c1,c2});
	//	cout<<g[b].back().cost1<<endl;
	}
	dfs(1,0);
	for(int i=1;i<n;i++){
		p[i]++;
		p[i+1]++;
		p[lca(i,i+1)]-=2;
	}
	work(1);
	for(int i=1;i<=n;i++){
	//	cout<<p[i];
	}
	cout<<ans;
	return 0;
} 
2023/2/1 16:40
加载中...