[BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT) 题面 题面较长,略 分析 考虑把问题转化成一个依赖性问题 我们把每只奶牛投出的两票中至少有一票和最终结果相符合转化:一只奶牛刚好投两次票,所以只要不满足奶牛的其中一次投票,就要满足另一次,这样就转化成了依赖性问题. 然后把每个议案拆成两个点,一个代表Y,一个代表N,每次把第一票不符合的点向符合的点连边,跑2-SAT 如果用传统的tarjan算法不好判断Y,N都可以的情况,观…
P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意: 给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 "支持或反对某法案", 每头牛需要至少满足一个表决, 不可能成立的话输出 IMPOSSIBLE, 否则输出方案, Y代表能, N代表不能若是有的解中法案可以通过, 有些不能则输出"?" 哇这题确认过眼神, 遇上对的测评机莫名洛谷 \(RANK 1\) 首先若是没有输出 \(?\) 这题就是一个裸的 限…
P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意 题意翻译 简述:给出\(n\)个法案,\(m\)头牛的意见,每头牛有两个表决格式为"支持或反对某法案",每头牛需要至少满足一个表决,不可能成立的话输出IMPOSSIBLE,否则输出方案,\(Y\)代表能,\(N\)代表不能.若是有的解中法案可以通过,有些不能则输出"?". 由于对\(Farmer\ John\)的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.…
简述:给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 “支持或反对某法案”, 每头牛需要至少满足一个表决, 不可能成立的话输出 IMPOSSIBLE, 否则输出方案, Y代表能, N代表不能,若是有的解中法案可以通过, 有些不能则输出“?” 首先不难看出这是一个2-SAT问题 那么我们先建好图然后tarjan缩点 主要的问题就是如何判断一个法案是否在不同方案里有不同选择了 这个可以直接dfs,设$i$表示该法案通过,$i'$表示该法案不通过,那么在缩完点后的DAG上跑,看看从$i…
[USACO11JAN]大陆议会The Continental Cowngress_2-sat 题意: 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会. 议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 <= M <= 4000) 会给N个议案投票(1 <= N <= 1,000) .每只 奶牛会对恰好两个议案 B_i and C_i (1 <= B_i <= N; 1 <= C_i &l…
noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把每个点拆成0和1两个点. 那么我们就建图,如果x等于A的话y必须等于B,那么从x的A点向y的B点连一条有向边,表示选了一个点它所有的后继点也必须选. 没有一组合法解的情况当且仅当x的01两个点缩点后在同一个强联通分量里. bzoj 1823 裸题 #include<iostream> #inclu…
2199: [Usaco2011 Jan]奶牛议会 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 375  Solved: 241[Submit][Status][Discuss] Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 <= M <= 4000) 会给N个议案投票(1 <= N &…
http://www.lydsy.com/JudgeOnline/problem.php?id=2199 题意:裸的2-SAT,但是问每个变量在所有解中是只能为真还是只能为假还是既可以为真又可以为假 这样的话求$SCC$的做法就不好做了 于是只能用$naive$做法了,枚举每个变量选择真假然后$dfs$一遍看看是否可行 点从2开始,然后就可以愉快的异或啦 #include <iostream> #include <cstdio> #include <cstring> #…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2199 [算法] 2-SAT [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 1010 #define MAXM 4010 struct edge { int to,nxt; } e[MAXM << ]; int n,m,tot; ]; ]; inline void addedge(int u…
题目链接 建边不说了.对于议案'?'的输出用拓扑不好判断,直接对每个议案的结果DFS,看是否会出现矛盾 Tarjan也用不到 //964kb 76ms #include <cstdio> #include <cstring> #include <algorithm> const int N=2005,M=16005; int n,m,Enum,H[N],nxt[M],to[M],conf[N];//conflict bool vis[N]; char ans[N]; i…