首页 > 其他分享 >P2607 [ZJOI2008] 骑士

P2607 [ZJOI2008] 骑士

时间:2023-03-06 20:22:21浏览次数:33  
标签:nxt fa int vis P2607 ZJOI2008 go 骑士 hd

和<没有上司的舞会>一样,但树上多了条边

 

 断掉环上一条边,两个点分别做dp ,取max

 

#include <iostream>
#include <algorithm>
using namespace std ;
 const int N=1e6+5,M=2*N;
 #define int long long
 int n,vis[N],a[N];
 int rt1,rt2,f[N][2];
 int nxt[M],go[M],hd[N],all=1;
 int e;
 
 void add(int x,int y){
 	go[++all]=y,nxt[all]=hd[x],hd[x]=all;
 }
 void find(int x,int fa){
 	vis[x]=1;
 	int i,y;
 	for(i=hd[x];i;i=nxt[i]){
 		y=go[i]; if(y==fa) continue;
 		if(vis[y]){
 			rt1=x,rt2=y; e=i; break;
 		}
 		find(y,x);
 	}
 }
 void dp(int x,int fa){
 	int i,y;
 	vis[x]=1;
 	f[x][1]=a[x];
 	f[x][0]=0;
 	for(i=hd[x];i;i=nxt[i]){
 		y=go[i]; if(y==fa||i==e||(i^1)==e) continue;
 		dp(y,x);
 		f[x][0]+=max(f[y][1],f[y][0]);
 		f[x][1]+=f[y][0];
 	}
 }
 signed main(){
 	int i,x,t1,t2,ans=0;
 	cin>>n;
 	for(i=1;i<=n;i++){
 		cin>>a[i]>>x;
 		add(x,i);add(i,x); 
 	}
 	for(i=1;i<=n;i++){
 		if(vis[i]) continue;
 		find(i,-1);
 		dp(rt1,-1); t1=f[rt1][0];
 		
 		dp(rt2,-1); t2=f[rt2][0];
 		ans+=max(t1,t2);
 	}
 	cout<<ans;
 }

 

标签:nxt,fa,int,vis,P2607,ZJOI2008,go,骑士,hd
From: https://www.cnblogs.com/towboa/p/17185266.html

相关文章

  • 小恐龙の珍贵图片(空洞骑士的)
    如果还打空洞的话下一步应该就是风化面具了,还有时间就打打全福辉(然鹅浮光和马爹感觉这辈子都过不去)......
  • 骑士得到金币问题
    问题国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、......
  • ZJOI2008, 树的统计 树链剖分模板
    //题意:给定一棵树,现在我需要询问以下操作//1.q,u之间的最小值//2.q,u之间的简单路径的权值和//3.修改树上q点的权值//思路:如果是在一段序列上的问......
  • [AHOI2014/JSOI2014]骑士游戏
    链接:https://www.luogu.com.cn/problem/P4042题目描述:对于一个怪物\(i\),可以花费\(c_{i}\)的代价将其变为一个怪物集合,或花费\(c2_{i}\)的代价消灭他。求消灭怪物\(1\)的......
  • [AHOI2014/JSOI2014]骑士游戏
    链接:https://www.luogu.com.cn/problem/P4042题目描述:对于一个怪物$i$,可以花费$c_{i}$的代价将其变为一个怪物集合,或花费$c2_{i}$的代价消灭他。求消灭怪物$1$的最小代......
  • 2199. 骑士共存问题
    题目链接2199.骑士共存问题在一个\(n*n\)个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。对于给定的\(n*n\)......
  • 骑士的移动(Knight Moves)
    ​​KnightMoves​​TimeLimit:3000MS MemoryLimit:Unknown 64bitIOFormat:%lld&%llu​​Submit ​​​​Status​​Description​​​​Afriendofyou......
  • 题解 LGP2607【[ZJOI2008] 骑士】
    problem基环树森林带权最大独立集。\(n\leq10^6\)。solution0这里先解释一下基环树森林,它就是一个\(n\)个点\(n\)条边的森林,同时是一个荒漠。我们拿出其中一棵连......
  • BZOJ1036-[ZJOI2008]树的统计Count&&POJ3237-Tree
    为什么把这两题放在一起呢,因为这两题其实是一道题,只是输入顺序不一样。这里主要以BZOJ1036为例。1036:[ZJOI2008]树的统计CountTimeLimit: 10Sec  MemoryLimit: ......
  • 骑士游历问题(马踏棋盘)解析(c++)
    骑士游历问题:在国际棋盘上使一个骑士遍历所有的格子一遍且仅一遍,对于任意给定的顶点,输出一条符合上述要求的路径解题思路:这是一道经典的遍历问题(DFS),由于题目要求遍历全部,那......