time limit: 10 sec memory limit: 162 mb
submit: 4157 solved: 1805
[submit][status][discuss]
學校放假了······有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如a
和b都是學校的學生,a要回家,而c來看b,c與a不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼一
個解決方案就是b睡a的床而c睡b的床。而實際情況可能非常複雜,有的人可能認識好多在校學生,在校學生之間也
不一定都互相認識。我們已知一共有n個人,並且知道其中每個人是不是本校學生,也知道每個本校學生是否回家
。問是否存在乙個方案使得所有不回家的本校學生和來看他們的其他人都有地方住。
第一行乙個數t表示資料組數。接下來t組資料,
每組資料第一行乙個數n表示涉及到的總人數。
接下來一行n個數,第i個數表示第i個人是否是在校學生(0表示不是,1表示是)。
再接下來一行n個數,第i個數表示第i個人是否回家
(0表示不回家,1表示回家,注意如果第i個人不是在校學生,那麼這個位置上的數是乙個隨機的數,
你應該在讀入以後忽略它)。
接下來n行每行n個數,
第i行第j個數表示i和j是否認識
(1表示認識,0表示不認識,第i行i個的值為0,但是顯然自己還是可以睡自己的床),
認識的關係是相互的。
1 ≤ n ≤ 50,1 ≤ t ≤ 20
對於每組資料,如果存在乙個方案則輸出「^_^」(不含引號)否則輸出「t_t」(不含引號)。
(注意輸出的都是半形字元,即三個符號的ascii碼分別為94,84,95)13
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
ˆ ˆ幾乎是裸的二分圖匹配
1 #include2 #include3 #include4using
namespace
std;56
intt,n,sn,gn;
7int a[100],b[100],match[100];8
bool mp[100][100],vis[100];9
bool
flag;
1011
bool find(int
x)1222}
23return
false;24
}2526int
main()
2740
for(int i=1;i<=n;i++)
41for(int j=1;j<=n;j++)
4249
for(int i=1;i<=n;i++)
5057}58
if(flag) printf("
^_^\n");
59else printf("
t_t\n");
60}61return0;
62 }
1433 ZJOI2009 假期的宿舍
題解 水題,然而wa了n次因為忘記自己可以睡自己的床。不過還是在30min內a了,把每個點拆成兩個,st連向所有需要床位的人,所有床位連向ed,如果ij認識就連一條邊。include include include include include include define inf 1e9 usi...
bzoj 1433 ZJOI2009 假期的宿舍
description input output sample input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 sample output hint 對於30 的資料滿足1 n 12。對於100 的資料滿足1 n 50,1 t 20。把人視為左邊的集合,把床視為右邊的...
BZOJ 1433 ZJOI2009 假期的宿舍
bzoj 1433 zjoi2009 假期的宿舍 二分圖匹配 題意 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如a和b都是學校的學生,a要回家,而c來看b,c與a不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是b睡a的床而c睡b的床...