JSOI2010 滿漢全席

2022-05-09 20:01:53 字數 1484 閱讀 9497

洛谷 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 #include4

using

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...