解题报告:武大第十五届校赛网络赛 H.Werewolf 树型DP
来源:互联网 发布:centos7 yum安装wget 编辑:程序博客网 时间:2024/06/05 16:53
题目链接
题意:
狼人杀投票环节,n个人进行投票,狼一定不会投狼,人可以任意投(除自己),现给出每个人的投票情况,问最多可能会有多少头狼。
思路:
比赛的时候没有多想,一直用树型DP去写,后来发现会有环的情况出现,没有想到解决办法。。。
赛后被题解点拨一下,发现两轮DFS可以解决环的情况,第一轮判断当前点所在的图有没有环,如果有,找出环上相邻的两个点,然后第二轮分别枚举环上的相邻的两个点作为起点和终点,终点不能选做狼人,然后就是基础的树型DP的模型。。。
代码:
#include<bits/stdc++.h>#define fi first#define se second#define pii pair<int,int>using namespace std;vector<int>G[500005];int n;int a,b;int dp[500005][2];bool vis[500005];bool VIS[500005];vector< pair<int,int> >V;void dfs(int x,int fa=0){ VIS[x]=true; for(int i=0;i<G[x].size();i++){ int &j = G[x][i]; if(j==fa)continue; if(VIS[j]){ a = x ; b = j ; }else { dfs(j,x); } }}void dfs2(int x){ vis[x]=true; dp[x][1]=(x!=b); dp[x][0]=0; for(int i=0;i<G[x].size();i++){ int &j = G[x][i]; if(x==a&&j==b&&i!=G[x].size()-1)continue; if(!vis[j]){ dfs2(j); dp[x][1] += dp[j][0]; dp[x][0] += max(dp[j][1],dp[j][0]); } }}int main(){ scanf("%d",&n); for(int i=1,x;i<=n;i++){ scanf("%d",&x); V.emplace_back( pii(min(i,x),max(i,x)) ); }sort(V.begin(),V.end()); pii t ; for(int i=0;i<V.size();i++){ if(!i||V[i]!=V[i-1]){ t = V[i]; G[t.fi].emplace_back(t.se); G[t.se].emplace_back(t.fi); } } int ans = 0; for(int i=1;i<=n;i++){ if(VIS[i])continue; a = i;b = 0; dfs(i); memset(vis,0,sizeof(vis)); dfs2(a); int t = max(dp[a][1],dp[a][0]);; if(b){ swap(a,b); memset(vis,0,sizeof(vis)); dfs2(a); t = max(t,max(dp[a][1],dp[a][0])); } ans += t; }printf("%d\n",ans); return 0;}
0 0
- 解题报告:武大第十五届校赛网络赛 H.Werewolf 树型DP
- 算法第十五周解题报告
- WOJ-29 Werewolf(DP)
- 《“H”组合》解题报告
- 武大网络赛H题
- 【DP】2479解题报告
- HDU1864解题报告-dp
- 第十五周程序设计作业解题报告
- 12月份大一周赛解题报告
- H - Climbing Worm解题报告
- 274. H-Index解题报告
- 2014牡丹江网络赛解题报告
- [ZJOI2012]网络 解题报告
- HDU4089概率dp解题报告
- hdu 1024 dp 解题报告
- 解题报告:HDU_3944 DP? 数论
- 解题报告: POJ_2955 Brackets DP
- Poj 1260 DP 解题报告
- 正则表达式(网页爬虫)
- 【考试总结】[CQOI2017]考试总结
- python 基础教程 23章NNTP 1
- django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applie
- jenkins权威指南学习---第一章---jenkins介绍
- 解题报告:武大第十五届校赛网络赛 H.Werewolf 树型DP
- leetcode解题之102&107. Binary Tree Level Order Traversal java版(二叉树层次遍历)
- Struts2 Web 资源获取的4种方式
- Angular中实现文字的渐变效果
- PAT-A-1062. Talent and Virtue (25)
- Ueditor在.net配置遇到config、hander等未定义的解决方法
- 初探进程及task_struct
- python 基础教程 23章NNTP 2
- Mac系统如何显示.开头的文件夹或者隐藏的文件夹