蒟蒻的我还是搞不懂与城市环路那道题有什么不同

P2607 [ZJOI2008] 骑士

``` #include<iostream> #include<cstdio> using namespace std; #define N 2000010 struct edge { int next; int to; } e[N]; int head[N]; bool flag[N]; int p[N]; long long dp[N][2]; int n; long long ans; int A,B; int cnt; inline int read(){ int f=1,x=0; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+ch-'0'; ch=getchar(); } return f*x; } void add(int a,int b){ e[++cnt].to=b; e[cnt].next=head[a]; head[a]=cnt; } inline void dfs(int u,int fa){ dp[u][1]=p[u];dp[u][0]=0; int v; for(register int i=head[u];i;i=e[i].next){ v=e[i].to; if(v==fa) continue; dfs(v,u); dp[u][1]+=dp[v][0]; dp[u][0]+=max(dp[v][1],dp[v][0]); } return; } int main() { n=read(); int hate,power; bool find=0; for(register int i=1;i<=n;i++){ power=read();hate=read(); p[i]=power; if(!find&&flag[hate]&&flag[i]){ find=1; A=hate;B=i; continue; } flag[hate]=flag[i]=1; add(hate,i); add(i,hate); } dfs(A,A); ans=dp[A][0]; dfs(B,B); ans=max(ans,dp[B][0]); printf("%lld",ans); return 0; } ```
by OI_lover @ 2018-10-10 14:17:11


只有20分......
by OI_lover @ 2018-10-10 14:18:08


你好垃圾啊
by _skyline @ 2018-10-10 14:25:53


这么简单都不会
by _skyline @ 2018-10-10 14:26:04


https://www.luogu.org/paste/p1z8w7hj
by _skyline @ 2018-10-10 14:28:07


果然天秀
by Dispwnl @ 2018-10-10 15:09:39


某位素质感人
by xMinh @ 2018-10-10 15:11:23


这就更有趣了 禁言警告
by PBCWZCC @ 2018-10-10 16:20:14


不好意思,本人是被某位~~(你知道的)~~,话说一个机房的要不要这么**_残忍_**,我刚刚才发现
by _skyline @ 2018-11-01 17:20:59


|