hdu1824:http://acm.hdu.edu.cn/showproblem.php?pid=1824

题意:中文题。

题解:这一题建边要考虑两个限制条件,一个是队伍内部的,就是假如说 a,b,c,的话 a-->~b,b-->~a;a-->~c,c-->~a;同时b,c要留时候必须同时留下所以b-->c,c-->b;~b-->~c,~c-->~b;就是b留c需要留,c留b需要留,b不留c不要留,c不留留b不需要留,;;,然后是每一对的情况,直接建边就可以了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,m,n;
const int N=;
const int M=;
const int INF=0xffffffff;
struct Edge{
int to,next;
} edge[M];
int cnt,u,v,dep,top,atype;
int dfn[N],low[N],vis[N],head[N],st[N],belong[N],in[N],out[N],sum[N];
//sum[i]记录第i个连通图的点的个数,in[i],out[i],表示缩点之后点的入度和初度。
void init(){
cnt=dep=top=atype=;
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
memset(belong,,sizeof(belong));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(sum,,sizeof(sum));
}
void addedge(int u,int v){
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt++;
} void Tarjan(int u){
dfn[u]=low[u]=++dep;
st[top++]=u;
vis[u]=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].to;
if(!dfn[v]){
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v]){
low[u]=min(low[u],dfn[v]);
}
}
int j;
if(dfn[u]==low[u]){
atype++;
do{
j=st[--top];
belong[j]=atype;
sum[atype]++; //记录每个连通分量中点的个数
vis[j]=;
}
while(u!=j);
}
}
int fg[N],t1,t2,t3;
int main(){
while(~scanf("%d%d",&t,&m)){
int a,b,c;
int base=*t;
init();
for(int i=;i<t;i++){
scanf("%d%d%d",&a,&b,&c);
addedge(b,c);
addedge(c,b);
addedge(b+base,c+base);
addedge(c+base,b+base);
addedge(a+base,b);
addedge(a+base,c);
addedge(b+base,a);
addedge(c+base,a);
}
while(m--){
scanf("%d%d",&a,&b);
addedge(a,b+base);
addedge(b,a+base);
}
for(int i=; i<*t; i++)
if(!dfn[i])
Tarjan(i);
bool flag=false;
for(int i=;i<*t;i++){
if(belong[i]==belong[i+base]){
flag=true;
break;
}
}
if(!flag)printf("yes\n");
else
printf("no\n");
} }

随机推荐

  1. j2ee学习笔记 Filter过滤器

    作用:过滤response和request对象的内容 使用: Filter是J2EE的一个接口,自定义Filter需要实现该接口,并重写所有的方法. Filter提供的方法: init() doFil ...

  2. VC/MFC强制退出本进程自己,VC/MFC关闭自己

    正常情况下通过关闭主窗口close或发送PostQuitMessage(WM_QUIT);消息 能关闭窗口.但如果一个进程中包括多个子线程当子线程没有结束还占用 系统资源时通过上面的两种方法是不能立即 ...

  3. Android Studio: 我解决的DEX出错。

    今天开始使用了Android Studio.感觉很方便,很强大.因为它还集成了SVN,GIT等版本管理工具. 由于工程在CheckOut下来后想直接在终端上运行,在引入外部jar包之后开始运行啦,结果 ...

  4. Unexpected CFBundleExecutable Key

    昨天晚上打包上传的时候报错: ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/xxx ...

  5. JDBC、Hibernate、Mybaites处理数据的流程及对DAO的理解

    以查询一个用户信息(id,name)为例: JDBC 1. 获取一个connection 2. 生成一个statement 3. 拼接SQL语句 4. 查询对象,获取结果集(假设已经找到我们需要的对象 ...

  6. 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置

    一. 背景:     公司项目有所改动,要求微信(移动端调用的接口),日志接口换位log4net,全部改成以rabbitMQ作为服务支持, 二.本地环境:     windows 10 enterpr ...

  7. C#中volatile的用法

    恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法:看如下三句get代码: int i1;  ...

  8. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  9. angularjs跨域调取webservice

    1.配置 web.config <webServices> <!--必须添加--> <protocols> <add name="HttpGet&q ...

  10. MVVM模式应用 之xml文件的读取

    XML如下所示: <?xml version="1.0" encoding="utf-8" ?> <schools> <schoo ...