由於對farmer john的領導感到極其不悅,奶牛們退出了農場,組建了奶牛議會。議會以「每頭牛 都可以獲得自己想要的」為原則,建立了下面的投票系統: m只到場的奶牛 (1 <= m <= 4000) 會給n個議案投票(1 <= n <= 1,000) 。每只 奶牛會對恰好兩個議案 b_i and c_i (1 <= b_i <= n; 1 <= c_i <= n)投 出「是」或「否」(輸入檔案中的'y'和'n')。他們的投票結果分別為vb_i (vb_i in ) and vc_i (vc_i in )。 最後,議案會以如下的方式決定:每只奶牛投出的兩票中至少有一票和最終結果相符合。 例如bessie給議案1投了贊成'y',給議案2投了反對'n',那麼在任何合法的議案通過 方案中,必須滿足議案1必須是'y'或者議案2必須是'n'(或者同時滿足)。 給出每只奶牛的投票,你的工作是確定哪些議案可以通過,哪些不能。如果不存在這樣乙個方案, 輸出"impossible"。如果至少有乙個解,輸出: y 如果在每個解中,這個議案都必須通過 n 如果在每個解中,這個議案都必須駁回 ? 如果有的解這個議案可以通過,有的解中這個議案會被駁回 考慮如下的投票集合: - - - - - 議案 - - - - - 1 2 3 奶牛 1 yes no 奶牛 2 no no 奶牛 3 yes yes 奶牛 4 yes yes 下面是兩個可能的解: * 議案 1 通過(滿足奶牛1,3,4) * 議案 2 駁回(滿足奶牛2) * 議案 3 可以通過也可以駁回(這就是有兩個解的原因) 事實上,上面的問題也只有兩個解。所以,輸出的答案如下: yn?
* 第1行:兩個空格隔開的整數:n和m * 第2到m+1行:第i+1行描述第i只奶牛的投票方案:b_i, vb_i, c_i, vc_i
* 第1行:乙個含有n個字元的串,第i個字元要麼是'y'(第i個議案必須通過),或者是'n' (第i個議案必須駁回),或者是'?'。 如果無解,輸出"impossible"。
3 41 y 2 n
1 n 2 n
1 y 3 y
1 y 2 y
yn?gold
2-sat問題的模板題目,先說2-sat問題的基本解法:
一些問題可以轉成布林方程來求解····
我們的目的是將其布林方程的每個文字拆開成兩點,一點表示其本身,一點表示它的非,比如a就拆成a與┐a,並且將各種運算符號轉化為只含有^(與)和->(a->b表示a為真則b為真)的形式,比如∨轉化為┐a -> b ^ ┐b -> a ,a一定為真就轉換為 ┐a->a 的形式,然後將->轉換成邊,兩邊連上對應的點。
如果a與┐a在最後建成的圖的同乙個強連通分量裡···那麼布林方程有解
如果a所在強連通分量的拓撲序在┐a所在強連通分量的拓撲序之後,那麼a為真,之前a為假,如果相等則真假均可以取。這裡求拓撲序直接用tarjian即可,先找到的強連通分量的拓撲序一定更大
以上就是基本知識
但這道題有點特殊·····因為包含a拓撲序與┐a相等的情況要判斷····用tarjian的話有點麻煩···
但n很小···直接dfs即可····若a可以到達┐a,則說明a可能與┐a在同一強連通分量或者a所在強連通分量的拓撲序小於等於┐a的拓撲序
#include#include#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=2005
;const
int m=10005
;int first[n],next[m],go[m],tot=1
,n,m;
bool
visit[n];
inline
void comb(int a,int
b)inline
int tran(int
a)inline
intr()
inline
void dfs(intu)}
inline
bool jud(int
u)int
main()
for(int i=1;i<=n;i++)
else
if(!flag1) cout<<"n"
;
else
if(!flag2) cout<<"y"
;
else cout<<"?"
; }
return0;
}
條件轉化,2 sat BZOJ 1997
time limit 10 sec memory limit 64 mb submit 1810 solved 684 submit status discuss 2 6 9 1 4 1 5 1 6 2 4 2 5 2 6 3 4 3 5 3 6 1 4 2 5 3 6 5 5 1 2 2 3 3 ...
演算法設計課程複習 2 優先佇列
優先佇列的出隊順序是按照優先順序來的,可以找到最小或者最大元素,同時支援插入或者刪除最小最大元素。優先佇列的格式 priority queue t 佇列中元素的資料型別 container 用於儲存和訪問佇列元素的底層容器的型別。compare 比較關係,預設是數值上的小於關係 return a優先...
WINDOWS程式設計 複習(2)
可選mm anisotropic 任意 x y 可選可選 上面這個圖我是從這個部落格轉過來的。至於有什麼區別了,我覺得說不清楚,直接給上測試 吧 include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain h...