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 ] , 假如我们找到了序 ...
随机推荐
- python---django中url访问方法
只是了解,不推荐使用,毕竟干扰太多,任意冲突,也没有解耦,应该使用路由分发 在url匹配中支持正则匹配,例如: from django.conf.urls import include, urlfro ...
- Spark记录-scala快速入门
1.hello world程序 object HelloWorld { def main(args: Array[String]) { println("Hello,World!" ...
- cin,cout,printf,scanf效率对比
From:http://www.cnblogs.com/killerlegend/p/3918452.html Author:KillerLegend Date:2014.8.17 杭电OJ之3233 ...
- long的变量后面没有L加会有什么后果
不加L的话,默认就是int型了. 当给long赋值一个超过int范围的值的时候,会出问题. java中对字面的数值是以int的形式来表示的 例如:long l= 6553555522222 报错:T ...
- bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅
http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美 ...
- ASP.NET MVC学习笔记-----Filter(1)
Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的fi ...
- [转载]Browser Link feature in Visual Studio Preview 2013
http://blogs.msdn.com/b/webdev/archive/2013/07/29/10430221.aspx Browser Link feature in Visual Studi ...
- Spring Mvc + Maven + BlazeDS 与 Flex 通讯 (七)
BlazeDS 说明 BlazeDS是由Adobe开源的基于amf协议的,用于解决flex与java通讯的组件; 基于传统的文本协议的XML传输方式,在抽象层方面会有很大的压力,特别在需要序列化与反序 ...
- 20155339 2016-2017-2 《Java程序设计》第5周学习总结
20155339 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 使用try.catch 使用try.catch语法,JVM会先尝试执行try区块中的代码,如 ...
- Passbook
CHENYILONG Blog Passbook 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilon ...