社区讨论
蒟蒻的我还是搞不懂与城市环路那道题有什么不同
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 条回复,欢迎继续交流。
正在加载回复...