请求加强数据
查看原帖
请求加强数据
567739
Sellaris楼主2022/3/24 23:23

请求加强数据。

rt,样例都没过AC了。

还跑得飞快。

///*****Sellaris*****///
//#pragma once
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
#include <bits/extc++.h>
#define ll long long
using namespace std;
using namespace __gnu_pbds;
const int maxn=8e5;
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
    while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
    return ret*f; //x=(x<<1)+(x<<3)+(ch^48);
}

int tot;
int dis[maxn];
int n,s;
int mx,cur;
int pre[maxn];
int vis[maxn];
int val[maxn];
int head[maxn];
int ans;

struct Edge{
	int u,v,w,next;
}G[maxn<<1];
inline void addedge(int u,int v,int w){
	G[++tot].u=u;G[tot].v=v;G[tot].w=w;G[tot].next=head[u];head[u]=tot;
	G[++tot].u=v;G[tot].v=u;G[tot].w=w;G[tot].next=head[v];head[v]=tot;
}

inline void dfs(int u,int fa){
	for(int i=head[u];i;i=G[i].next){
		int v=G[i].v;if(v==fa)continue;
		dis[v]=dis[u]+G[i].w;pre[v]=u;
		if(dis[v]>mx)cur=v,mx=dis[v];
		dfs(v,u);
	}
}

inline void scan(){
	n=read();s=read();
	for(int i=1;i<n;i++){
		int u=read(),v=read(),w=read();
		addedge(u,v,w);
	}
}

inline void tag(){
    int x=pre[cur];
    vis[cur]=1;
    while(x){
        vis[x]=1;
        x=pre[x];
    }
}
inline int dfs2(int u,int fa){
    if(val[u]) return val[u];
	for(int i=head[u];i;i=G[i].next){
		int v=G[i].v;
        if(v==fa) continue;
        if(vis[v]) continue;
        dfs2(v,u);
        val[u]=max(val[u],val[v]+G[i].w);
    }
    return val[u];
}

inline void find(){
    for(int j=1;j<=n;j++){
        if(vis[j]){
            dfs2(j,pre[j]);
            ans=max(ans,val[j]);
        }
    }
}

signed main(){
    //std::ios::sync_with_stdio(false);std::cin.tie(NULL);std::cout.tie(NULL);
    //freopen(in.txt,r,stdin);freopen(out.txt,w,stdout);
    scan();
    dfs(1,0);
    mx=0;memset(dis,0,sizeof(dis));
    pre[cur]=0;
	dfs(cur,0);
    tag();
    find();
    std::cout<<ans;
    return 0;
}

第二个样例应该输出 5 程序输出 4 AC记录

2022/3/24 23:23
加载中...