bzoj 1060 时态同步 水题?神题?

一看好水-》敲完Wa-》一个小时没看出错-》数据错了
此题的f要开int,因为标程开的int,然而ans要开long long
bzoj 1060 时态同步 水题?神题? - zc - zc的博客

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>

#define ll long long
#define inf 1e9
#define eps 1e-10
#define md
#define N 500010
using namespace std;
struct yts { int x,t,l,ne; } e[2*N];
int f[N];
bool vis[N];
int fa[N],v[N];
int rt,n,num=0;
ll ans=0;
void put(int x,int y,int l)
{
num++; e[num].x=x; e[num].t=y; e[num].l=l;
e[num].ne=v[x]; v[x]=num;
}
//ll qmax(ll a,ll b) { return a>b?a:b;}
void dfs(int x)
{
//vis[x]=1;
for (int i=v[x];i;i=e[i].ne)
{
int y=e[i].t;
if (y!=fa[x])
{
fa[y]=x;
dfs(y);
f[x]=max(f[x],f[y]+e[i].l);
}
}
}

int main()
{
//freopen("synch.8.in","r",stdin); freopen("synch.out","w",stdout);
int x,y,l;
scanf("%d%d",&n,&rt);
for (int i=1;i<=n-1;i++)
{
scanf("%d%d%d",&x,&y,&l);
put(x,y,l); put(y,x,l);
}
fa[rt]=0; dfs(rt);
ans=0;
for (int xx=1;xx<=n;xx++)
{
for (int i=v[xx];i;i=e[i].ne)
{
int yy=e[i].t;
if (yy!=fa[xx])
ans+=f[xx]-f[yy]-e[i].l;
}
}
printf("%lld\n",ans);
//for (int i=1;i<=n;i++) printf("%d %lld\n",fa[i],f[i]); printf("\n");
return 0;
}



你可能感兴趣的:(bzoj 1060 时态同步 水题?神题?)