BZOJ4065 : [Cerc2012]Graphic Madness
因为两棵树中间只有k条边,所以这些边一定要用到。
对于每棵树分别考虑:
如果一个点往下连着两个点,那么这个点往上的那条边一定不能用到。
如果一个点往下连着一个点,那么这个点往上的那条边一定不能用到。
否则一定无解。
这样求出所有一定要用到的边后,如果不存在奇点且这个图是个连通图的话,那么就有解。时间复杂度$O(n+m+k)$。
#include<cstdio>
#include<cstring>
#define N 10010
int T,k,n,m,i,d[N],vis[N],g[N],v[N],ok[N],nxt[N],ed,flag;char sa[N],sb[N];
int getid(char s[]){
int l=std::strlen(s),x=0;
for(int i=2;i<l;i++)x=x*10+s[i]-'0';
if(s[0]=='A'){
if(s[1]=='S')return x;
return x+k;
}
if(s[1]=='S')return x+k+n;
return x+k*2+n;
}
void printname(int x){
if(x<=k){printf("AS%d",x);return;}
if(x<=k+n){printf("AP%d",x-k);return;}
if(x<=k*2+n){printf("BS%d",x-k-n);return;}
printf("BP%d",x-k*2-n);
}
void add(int x,int y){
v[++ed]=y;ok[ed]=1;nxt[ed]=g[x];g[x]=ed;d[x]++;
v[++ed]=x;ok[ed]=1;nxt[ed]=g[y];g[y]=ed;d[y]++;
}
int dfs1(int x,int y,int w){
if(x<=k)return 1;
if(x>k+n)return 0;
int t=0;
for(int i=g[x];i;i=nxt[i])if(v[i]!=y)t+=dfs1(v[i],x,i);
if(!t||t>2)return flag=1,0;
if(t==1)return 1;
if(w)d[x]--,d[y]--,ok[w]=ok[w^1]=0;
return 0;
}
int dfs2(int x,int y,int w){
if(x>k+n&&x<=k*2+n)return 1;
if(x<=k+n)return 0;
int t=0;
for(int i=g[x];i;i=nxt[i])if(v[i]!=y)t+=dfs2(v[i],x,i);
if(!t||t>2)return flag=1,0;
if(t==1)return 1;
if(w)d[x]--,d[y]--,ok[w]=ok[w^1]=0;
return 0;
}
void dfs3(int x){
if(vis[x])return;
vis[x]=1;
for(int i=g[x];i;i=nxt[i])if(ok[i])dfs3(v[i]);
}
void dfs4(int x){
if(vis[x])return;
vis[x]=1;
putchar(' ');printname(x);
for(int i=g[x];i;i=nxt[i])if(ok[i])dfs4(v[i]);
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&k,&n,&m);
for(ed=i=1;i<=n+m+k*2;i++)g[i]=d[i]=vis[i]=0;flag=0;
for(i=1;i<=n+m+k*3-2;i++)scanf("%s%s",sa,sb),add(getid(sa),getid(sb));
dfs1(k+1,0,0),dfs2(k*2+n+1,0,0);
for(i=1;i<=n+m+k*2;i++)if(d[i]&1)flag=1;
dfs3(1);
for(i=1;i<=n+m+k*2;i++)if(!vis[i])flag=1;
if(flag)puts("NO");
else{
printf("YES");
for(i=1;i<=n+m+k*2;i++)vis[i]=0;
dfs4(1);
puts("");
}
}
return 0;
}
BZOJ4065 : [Cerc2012]Graphic Madness的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 要back的题目 先立一个flag
要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...
- FK JavaScript之:ArcGIS JavaScript添加Graphic,地图界面却不显示
使用ArcGIS JavaScript,往地图中添加几个Graphic,基本是与官网示例代码一致.绘制的图形一闪而过之后,就没了 核心代码如下: iniToolBar: function () { t ...
- Animating graphic objects in Windows Forms.
原文: Animating graphic objects in Windows Forms. http://bobpowell.net/animation.aspx 文件下载备份:http://fi ...
- Graphic geometry
Graphic有3个很重要的属性:geometry.symbol和attributes. •geometry属性定义的是一个几何对象,它是Graphic的基础,因为Graphic要表达的就是这个几何对 ...
- C# Graphic 绘制圆、三角形、椭圆、图片
在form和panel上可以绘制图形,线段,圆,文字,图形等等. 绘制代码必须放在OnPaint()函数里面,因为窗体刷新的时候,都会调用该函数,重新刷新所绘的图. 示例代码在Panel上绘制图形来简 ...
- Solution for Latex error: "Cannot determine size of graphic"
I'm trying to include graphics in my Latex-file, which I compiled with latex+dvipdf on OS X. Latex h ...
- BZOJ 4057: [Cerc2012]Kingdoms( 状压dp )
状压dp.... 我已开始用递归结果就 TLE 了... 不科学啊...我dp基本上都是用递归的..我只好改成递推 , 刷表法 将全部公司用二进制表示 , 压成一个数 . 0 表示破产 , 1 表示没 ...
- BZOJ 4059: [Cerc2012]Non-boring sequences ( )
要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断. 考虑一段序列 [ l , r ] , 假如我们找到了序 ...
随机推荐
- HDU 4315 阶梯博弈变形
n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...
- [整理]C 内核源代码-学习资料
GNU C gnu项目:http://www.gnu.org/software/software.html ftp:http://ftp.gnu.org/gnu/ 托管:http://savannah ...
- 矩阵乘法优化DP
本文讲一下一些基本的矩阵优化DP的方法技巧. 定义三个矩阵A,B,C,其中行和列分别为$m\times n,n \times p,m\times p$,(其中行是从上往下数的,列是从左往右数的) $C ...
- 360 / 小米 / 百度 随身wifi Ubuntu 下作为无线网卡使用
这篇文章说得其实很好了,http://www.freemindworld.com/blog/2013/131010_360_wifi_in_linux.shtml 不过因为专利问题,官网貌似不直接提供 ...
- sql 跨服务器查询数据
方法一:用OPENDATASOURCE [SQL SERVER] 跨服务器查询 --1 打开 reconfigure reconfigure SELECT * FROM OPENDATASOURCE( ...
- CSS position:absolute浅析
一.绝对定位的特征 绝对定位有着与浮动一样的特性,即包裹性和破坏性. 就破坏性而言,浮动仅仅破坏了元素的高度,保留了元素的宽度:而绝对定位的元素高度和宽度都没有了. 请看下面代码: <!DOCT ...
- Gitlab & Github
windwos上Git的使用 软件下载地址:https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git ...
- Axure RP Pro 7.0
Axure RP Pro专为Rapid Prototype Design而生,它可以辅助产品经理快速设计完整的产品原型,并结合批注.说明以及流程图.框架图等元素将产品完整地表述给各方面设计人员,如UI ...
- thymeleaf:访问静态方法
<p class="left tel" th:if="${#strings.startsWith(T(net.common.util.tool.common.Req ...
- javascript-dom文档对象模型1
HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 一:HTML DOM 树 ...