比较玄学的问题求助
查看原帖
比较玄学的问题求助
378346
expnoi楼主2023/7/25 12:03
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int s=0,w=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')w=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')s=(s<<3)+(s<<1)+(c^48),c=getchar();
	return s*w;
}
inline void print(int x)
{
	if(x<0)x=-x,putchar('-');
	if(x>=10)print(x/10);
	putchar(x%10+48);
}
struct node
{
	int v,w,flg,next;
}e[1000010];
int eid=0,head[1000010],vis[5010],dep[5010],f[5010],w[5010],zj1,zj2,ans=0x3f3f3f3f;
inline void insert(int u,int v,int w)
{
	e[eid].v=v;
	e[eid].w=w;
	e[eid].next=head[u];
	head[u]=eid++;
}
int n;
inline void dfs(int u,int fa)
{
	vis[u]=1;
	for(int i=head[u];~i;i=e[i].next)
	{
		int v=e[i].v;
		if(v==fa||e[i].flg)continue;
		dfs(v,u);
	}
}
inline void dfs1(int u,int fa)
{
	f[u]=fa;
	for(int i=head[u];~i;i=e[i].next)
	{
		int v=e[i].v;
		if(v==fa||e[i].flg)continue;
		w[v]=e[i].w;
		dep[v]=dep[u]+e[i].w;
		dfs1(v,u);
	}
}
vector<int> p1,p2;
signed main()
{
	memset(head,-1,sizeof(head));
	n=read();
	for(int i=1;i<n;i++)
	{
		int u=read(),v=read(),w=read();
		insert(u,v,w);
		insert(v,u,w); 
	}
	for(int i=0;i<eid;i+=2)
	{
		p1.clear();
		p2.clear();
		p1.push_back(0);
		p2.push_back(0);//填位,从1开始,方便运算。 
		memset(vis,0,sizeof(vis));
		e[i].flg=e[i^1].flg=1;
		int c=e[i].w;
		dfs(1,0);
		int rt1=0,rt2=0;
		for(int i=1;i<=n;i++)
			if(!vis[i])
			{
				rt1=i;
				break; 
			}
		for(int i=1;i<=n;i++)
			if(vis[i])
			{
				rt2=i;
				break;
			}
		dfs1(rt1,0);
		dfs1(rt2,0);
		int st1=0,st2=0,ed1=0,ed2=0;
		for(int i=1;i<=n;i++)
		{
			if(!vis[i])if(dep[st1]<dep[i])st1=i;
			if(vis[i])if(dep[st2]<dep[i])st2=i;
		}
		dfs1(st1,0);
		dfs1(st2,0);
		for(int i=1;i<=n;i++)
		{
			if(!vis[i])if(dep[ed1]<dep[i])ed1=i;
			if(vis[i])if(dep[ed2]<dep[i])ed2=i;
		}
		zj1=zj2=0;
		int tmp=ed1;
		while(tmp!=st1)
		{
			p1.push_back(tmp);
			zj1+=w[tmp];
			tmp=f[tmp];
		}
		p1.push_back(st1);
		tmp=ed2;
		while(tmp!=st2)
		{
			p2.push_back(tmp);
			zj2+=w[tmp];
			tmp=f[tmp];
		}
		p2.push_back(st2);
		int m1=p1.size()-1,m2=p2.size()-1;
		int hzj1=zj1/2,hzj2=zj2/2;
		int mid1=0,mid2=0,sum=0,s1=0,s2=0,s3=0,s4=0,s5=0,res=0;
		for(int i=1;i<=m1;i++)
		{
			sum+=w[p1[i]];
			if(sum>=hzj1)
			{
				mid1=i+1;
				s1=sum-w[p1[i]];
				s1=max(s1,zj1-s1);
				s2=sum;
				s2=max(sum,zj1-s2);
				break;
			}
		}
		sum=0;
		for(int i=1;i<=m2;i++)
		{
			sum+=w[p2[i]];
			if(sum>=hzj2)
			{
				mid2=i+1;
				s3=sum-w[p2[i]];
				s3=max(s3,zj2-s3);
				s4=sum;
				s4=max(s4,zj2-s4);
				break;
			}
		}
		res=min({s1+s3+c,s1+s4+c,s2+s3+c,s2+s4+c});
		res=max({res,zj1,zj2});
		ans=min(ans,res);
		//cout<<i<<' '<<e[i].v<<" "<<res<<" "<<zj1<<" "<<s1<<" "<<s2<<" "<<s3<<" "<<s4<<"\n";
		e[i].flg=e[i^1].flg=0;
	}
	print(ans);
}

显然题目不会爆int

但是当我将

#define int long long

由100分变成了90分,不知道为什么。求助各位大佬。

2023/7/25 12:03
加载中...