洛谷 p4171 傳送門
bzoj1823 傳送門
2-sat裸題。
簡單講一下2-sat:
首先把題目給出的種種限制轉換為乙個圖。
以這道題來說,每種菜看作是兩個點,乙個點代表做成漢式,另乙個代表做成滿式。
然後考慮約束條件:
比如:評委要求a做成漢式,b做成滿式。
那麼如果a做成滿式,b就一定是滿式;同理,如果b做成漢式,那a一定是漢式。
所以這麼連邊:a滿-->b滿、b漢->a漢。
不同的題連邊方法也略有不同。
然後對這個圖求乙個強連通分量。
顯然,如果選擇了某個點,那麼那個點所在的強連通分量裡的所有點都要選擇。
對於1<=x<=n:
如果存在某個x,x漢和x滿在乙個強連通分量裡,就無解。
否則有解。
1 #include2 #include3 #include4using
namespace
std;56
intk;
7int
n,m;
8int hd[205],to[2005],nx[2005
],ec;910
int dish(int id,int
kd)11
1415
void edge(int af,int
at)16
2122
int dfn[205],low[205
],dc;
23int
in[205],st[205
],tp;
24int gr[205],gsz[205
],gc;
2526
void tarjan(int
p)27
36if(low[p]==dfn[p])
3747}48
}4950void
clean()
5158
59int
main()
60,kd[2
],p;
69char lim[10
];70
for(int j=0;j<=1;j++)
7178 edge(dish(id[0],kd[0]^1),dish(id[1],kd[1
]));
79 edge(dish(id[1],kd[1]^1),dish(id[0],kd[0
]));80}
81for(int i=1;i<=2*n;i++)
82if(!dfn[i])tarjan(i);
83int fl=1;84
for(int i=1;i<=n;i++)
8591}92
if(fl)printf("
good\n");
93else printf("
bad\n");
94}95return0;
96 }
JSOI2010 滿漢全席
time limit 10 sec memory limit 64 mb submit status discuss 滿漢全席是中國最豐盛的宴客菜餚,有許多種 同的材 透過滿族或是漢族的 方式,呈現在 繁多的菜色之中。由於菜色眾多而繁雜,只有極少 博學多聞技藝高超的廚師能夠做出滿漢全席,而能夠烹飪出...
JSOI2010 滿漢全席 2 SAT
傳送門 題目鏈結 滿漢全席 題目描述 滿漢全席是中國最豐盛的宴客菜餚,有許多種 同的材 透過滿族或是漢族的 方式,呈現在 繁多的菜色之中。由於菜色眾多而繁雜,只有極少 博學多聞技藝高超的廚師能夠做出滿漢全席,而能夠烹飪出經過專家認證的滿漢全席,也是中國廚師最大的榮譽之一。世界滿漢全席協會是由能夠 滿...
JSOI2010 滿漢全席 2 sat
做的第一道2 sat的題emmm。由題意可知,每個評委的兩個要求中,至少要滿足乙個,因此,如果有乙個不滿足,那另乙個必定要滿足 所以對於每道菜我們拆兩個點,乙個是滿族口味,乙個是漢族口味,如果我們要不滿足滿族口味,也就意味著我們要做漢族口味 所以照著每位評委的菜連邊即可 比如說乙個評委要求m1,m2...