繁华模拟赛 David与Vincent的博弈游戏
- #include<iostream>
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxn = ;
- struct edge{
- int to;
- int nxt;
- };
- int n,g[maxn],dep[maxn],dpd[maxn],dpv[maxn];
- int head[maxn],cnt;
- edge e[maxn];
- inline void add_edge(int u,int v){
- cnt++;
- e[cnt].to = v;
- e[cnt].nxt = head[u];
- head[u] = cnt;
- }
- void input(){
- cin>>n;
- int u,v;
- for(int i = ;i < n;i++){
- scanf("%d%d",&u,&v);
- add_edge(u,v);
- }
- }
- void dfs(bool dep,int x){
- if(!head[x]){
- dpd[x] = dpv[x] = g[x] = ;
- return;
- }
- for(int i = head[x];i;i = e[i].nxt){
- dfs(!dep,e[i].to);
- g[x] += g[e[i].to];
- }
- dpv[x] = dpd[x] = ;
- if(dep){
- int sum = ;
- for(int i = head[x];i;i = e[i].nxt){
- sum += dpv[e[i].to] - ;
- dpd[x] = max(dpd[x],g[x]-g[e[i].to]+dpd[e[i].to]);
- }
- dpv[x] = max(dpv[x],sum+);
- }else{
- int sum = ;
- for(int i = head[x];i;i = e[i].nxt){
- sum += dpd[e[i].to] - ;
- dpv[x] = max(dpv[x],g[x]-g[e[i].to]+dpv[e[i].to]);
- }
- dpd[x] = max(dpd[x],sum+);
- }
- }
- int main(){
- freopen("game.in","r",stdin);
- freopen("game.out","w",stdout);
- input();
- dfs(true,);
- cout<<dpd[]<<" "<<g[] - dpv[] + ;
- return ;
- }
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<vector>
- #include<queue>
- #include<map>
- #include<set>
- #include<stack>
- #include<cstdlib>
- #include<string>
- #include<bitset>
- #define INF 1000000000
- #define N 200005
- #define fi first
- #define se second
- #define debug(x) cout<<#x<<"="<<x<<endl
- #define MP(x,y) make_pair(x,y)
- using namespace std;
- typedef long long LL;
- typedef pair<int,int> pii;
- int dp[N],fa[N],lf[N],m;
- vector<int> G[N];
- void dfs1(int x,int d)
- {
- int v,i;
- if(d==) dp[x]=INF;
- else dp[x]=;
- for(i=;i<G[x].size();i++)
- {
- v=G[x][i];
- if(fa[x]!=v)
- {
- lf[x]=;
- fa[v]=x;
- dfs1(v,d^);
- if(d==)
- dp[x]=min(dp[x],dp[v]);
- else dp[x]+=dp[v];
- }
- }
- if(!lf[x])
- dp[x]=,m++;
- }
- void dfs2(int x,int d)
- {
- int v,i;
- if(d==) dp[x]=;
- else dp[x]=INF;
- for(i=;i<G[x].size();i++)
- {
- v=G[x][i];
- if(fa[x]!=v)
- {
- lf[x]=;
- fa[v]=x;
- dfs2(v,d^);
- if(d==)
- dp[x]+=dp[v];
- else dp[x]=min(dp[x],dp[v]);
- }
- }
- if(!lf[x])
- dp[x]=;
- //debug(x);
- //debug(dp[x]);
- }
- int main()
- {
- int n,i,a,b;
- freopen("game.in","r",stdin);
- freopen("game.out","w",stdout);
- cin>>n;
- for(i=;i<n;i++)
- {
- scanf("%d%d",&a,&b);
- G[a].push_back(b);
- //G[b].push_back(a);
- }
- dfs1(,);
- cout<<m-dp[]+<<' ';
- dfs2(,);
- cout<<dp[]<<endl;
- return ;
- }
- // davidlee1999WTK 2015/
- // srO myk Orz
- //ios::sync_with_stdio(false);
繁华模拟赛 David与Vincent的博弈游戏的更多相关文章
- 繁华模拟赛 David与阶乘
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- David与Vincent的博弈游戏[树型DP]
\(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...
- 繁华模拟赛 Vincent的城堡
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- 繁华模拟赛 Vicent与游戏
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- [繁华模拟赛]Evensgn 剪树枝
Evensgn 剪树枝 题目 繁华中学有一棵苹果树.苹果树有 n 个节点(也就是苹果),n − 1 条边(也就 是树枝).调皮的 Evensgn 爬到苹果树上.他发现这棵苹果树上的苹果有两种:一 种是 ...
- 繁华模拟赛day8 牛栏
/* 标称并没有用到题解中提到的那种奇妙的性质,我们可以证明,正常从1开始走的话,需要T次,如何使这个次数减小?题解中提到一个办法,有一步小于n/t,我们考虑这一步,如果把它匀到左右两步中,则可以减小 ...
- 繁华模拟赛day8 字典序
/* 这个题要我们求一个字典序,字符串给出的顺序,会对字母的字典序前后相对顺序进行限定,如何用来表示这种限定,我们注意到这种一个之后接着一个,只有先输出他前面的才能输出他,很明显就是拓扑排序,最小方案 ...
- 繁华模拟赛day8 科技树
/* 贪心,很明显是越容易升级的越先升级 */ #include<iostream> #include<cstdio> #include<string> #incl ...
- 繁华模拟赛 Vicent坐电梯
/*n<=5000这样就不能用O(n)的转移了,而是要用O(1)的转移.注意我们每次的转移都来自一个连续的区间,而且我们是求和区间求和?前缀和!令sum[step][i]表示f[ste ...
随机推荐
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
- 随便谈谈用canvas来实现文字图片粒子化
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 看了岑安大大的教程http://www.cnblogs.com/hongru/archive/2012/03/28/2420415.htm ...
- [电子书] 《Android编程入门很简单》
<Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...
- php 验证格式的函数总结
在首页上看到了这篇总结性的文章,就收藏了起来,想转载过来留着以后方便查看,但是没有找到转载的地,就只有copy下来了.在这里谢谢群主的分享! // ※CheckMoney($C_Money) 检查数据 ...
- 50个提高PHP编程效率的方法
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册 ...
- java设计优化--装饰者模式
装饰者模式拥有一个设计非常巧妙的结构,它可以动态的添加功能.在基本的设计原则中,有一条重要的设计准则就是合成/聚合复用原则.根据该原则的思想,代码复用应该尽可能使用委托,而不是使用继承.因为继承是一种 ...
- c++ 中 delete p与 delete []p的区别
#include <cstdio> class A{private: int i;public: ~A() { printf("hi"); }};void d(A *) ...
- Java设计模式-享元模式(Flyweight)
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查 ...
- Servlet,GenericServlet和HttpServlet的继承关系
HttpServlet是GenericServlet的子类. GenericServlet是个抽象类,必须给出子类才能实例化.它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一 ...
- The big deffrence between ($(du * )) and $(du *)
Infolist=($(du *))echo "Get the list one $Infolist"This has formed a array after quating t ...