[BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT)

题面

题面较长,略

分析

考虑把问题转化成一个依赖性问题

我们把每只奶牛投出的两票中至少有一票和最终结果相符合转化:一只奶牛刚好投两次票,所以只要不满足奶牛的其中一次投票,就要满足另一次,这样就转化成了依赖性问题。

然后把每个议案拆成两个点,一个代表Y,一个代表N,每次把第一票不符合的点向符合的点连边,跑2-SAT

如果用传统的tarjan算法不好判断Y,N都可以的情况,观察数据范围\(n \leq 1000,m \leq 4000\),每次判断的的时候直接枚举第i个议案的结果是Y还是N,然后从对应的两个拆点开始BFS,看看有没有矛盾即可。如果两个点都没有矛盾,输出?.

时间复杂度\(O(n(n+m))\)

代码

//Tarjan+拓扑不好判断?的情况,暴力dfs
//xi为A或xj为B 转化为 xi为B且xj为A
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#define maxn 1000
using namespace std;
int n,m;
vector<int>E[maxn*2+5];
void add_edge(int u,int v){
// printf("%d %d\n",u,v);
E[u].push_back(v);
}
int mark[maxn*2+5];
void dfs(int x){
mark[x]=1;
for(int y : E[x]){
if(!mark[y]) dfs(y);
}
} bool check(int x){
for(int i=1;i<=n*2;i++) mark[i]=0;
dfs(x);
for(int i=1;i<=n;i++){
if(mark[i]&&mark[i+n]) return 0;
}
return 1;
} char ans[maxn+5];
int main(){
char op1[2],op2[2];
int u,v,p,q;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %s %d %s",&u,op1,&v,op2);
if(op1[0]=='Y') p=1;
else p=0;
if(op2[0]=='Y') q=1;
else q=0;
add_edge(u+n*p,v+n*(1-q));
/*
i为Y,i+n为N
举例理解,如果op1和op2为Y,N
那么第一个询问是N,不满足,对应的点就是u+1*n,第二个询问是N,满足,对应的点就是v+1*n
*/
add_edge(v+n*q,u+n*(1-p));
}
bool flag1,flag2;
for(int i=1;i<=n;i++){
flag1=check(i);
flag2=check(i+n);
if(!flag1&&!flag2){
printf("IMPOSSIBLE\n");
return 0;
}else if(flag1&&!flag2){
ans[i]='Y';
}else if(!flag1&&flag2){
ans[i]='N';
}else{
ans[i]='?';
}
}
for(int i=1;i<=n;i++) printf("%c",ans[i]);
}

[BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT)的更多相关文章

  1. P3007 [USACO11JAN]大陆议会The Continental Cowngress

    P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意: 给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 "支持或反对某法案&q ...

  2. Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress

    P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意 题意翻译 简述:给出\(n\)个法案,\(m\)头牛的意见,每头牛有两个表决格式为"支持 ...

  3. P3007 [USACO11JAN]大陆议会The Continental Cowngress(2-SAT)

    简述:给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 “支持或反对某法案”, 每头牛需要至少满足一个表决, 不可能成立的话输出 IMPOSSIBLE, 否则输出方案, Y代表能, N代 ...

  4. [USACO11JAN]大陆议会The Continental Cowngress_2-sat

    [USACO11JAN]大陆议会The Continental Cowngress_2-sat 题意: 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会. 议会以“每头 ...

  5. bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat

    noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...

  6. BZOJ 2199: [Usaco2011 Jan]奶牛议会

    2199: [Usaco2011 Jan]奶牛议会 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 375  Solved: 241[Submit][S ...

  7. BZOJ 2199: [Usaco2011 Jan]奶牛议会 [2-SAT 判断解]

    http://www.lydsy.com/JudgeOnline/problem.php?id=2199 题意:裸的2-SAT,但是问每个变量在所有解中是只能为真还是只能为假还是既可以为真又可以为假 ...

  8. [BZOJ 2199] 奶牛议会

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2199 [算法] 2-SAT [代码] #include<bits/stdc++ ...

  9. BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)

    题目链接 建边不说了.对于议案'?'的输出用拓扑不好判断,直接对每个议案的结果DFS,看是否会出现矛盾 Tarjan也用不到 //964kb 76ms #include <cstdio> ...

随机推荐

  1. linux运维、架构之路-LVS负载均衡

    一.LVS介绍 1.介绍           LVS是Linux Virtual Server的简写,是linux虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能,由章文嵩博 ...

  2. 【CF1247F】Tree Factory(构造)

    题意:给定一棵n个点的树,要求将一条可以随意标号的链通过若干次操作变成这棵树 一次操作是指若v不为根且v的父亲不为根,则将v以及v的子树移到v的父亲的父亲上 要求给出标号方案,操作次数以及方案 n&l ...

  3. Internet History, Technology, and Security(week7)——Technology: Application Protocols

    Layer 4: Applications Application Layer TCP提供了“a reliable pipe”(一个坚固的水管)连接用户和服务器,确保了数据能准确不出意外地传输,所以A ...

  4. Node 资源

    Node.js 首页 最新的 Node.js 核心文档 Node.js 博客 Node.js 职位公告板 Node.js 包管理器(npm)的首页

  5. IDEA集成Mybatis打印日志插件

    MyBatis Log Plugin :把 mybatis 输出的sql日志还原成完整的sql语句. 如下图所示,点击Tools>MyBatis Log Plugin 然后运行程序后,就会看到对 ...

  6. es分片shard的数量

    适当的提升分片数量可以提升建立索引的速度: 一般情况下:一个索引库建立5-20个分片是最合适的: 注意:如果分片过少或者过多,都会降低检索的速度 分片数过多会导致: 1. 会导致打开比较多的文件2. ...

  7. 学习wavenet_vocoder之预处理、训练

    一.预处理 1.在进行预处理时,如果不明白需要的参数,可以使用命令获取帮助,从这里我们可以看到可以具体的用法和对应的参数. python preprocess.py --help python pre ...

  8. [CSP-S模拟测试]:超级树(DP)

    题目传送门(内部题5) 输入格式 一行两个整数$k$.$mod$,意义见上. 输出格式 一行一个整数,代表答案. 样例 样例输入1: 2 100 样例输出1: 样例输入2: 3 1000 样例输出2: ...

  9. The JavaScript this Keyword

    https://www.w3schools.com/js/js_this.asp What is this? The JavaScript this keyword refers to the obj ...

  10. .net 4.5 Test Async Task 异步测试

    using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...