社区讨论

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

P2607[ZJOI2008] 骑士参与者 5已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mi6y9wdr
此快照首次捕获于
2025/11/20 12:47
4 个月前
此快照最后确认于
2025/11/20 12:47
4 个月前
查看原帖
附上20分代码......``` #include #include 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; } 求大佬请教!谢谢!!!
CPP

回复

9 条回复,欢迎继续交流。

正在加载回复...