2023年省隊選拔賽浙江
時間限制: 1 s
空間限制: 256000 kb
題目等級 : 大師 master
學校放假了 · · · · · · 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複雜,有的人可能認識好多在校學生,在校學生之間也不一定都互相認識。我們已知一共有 n 個人,並且知道其中每個人是不是本校學生,也知道每個本校學生是否回家。問是否存在乙個方案使得所有不回家的本校學生和來看他們的其他人都有地方住。
輸入描述 input description
第一行乙個數 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,但是顯然自己還是可以睡自己的床),認識的關係是相互的。
輸出描述 output description
對於每組資料,如果存在乙個方案則輸出 「 ˆ ˆ 」(不含引號) 否則輸出「t t」(不含引號)。(注意輸出的都是半形字元,即三個符號的 ascii 碼分別為94,84,95)
樣例輸入 sample input
1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0
樣例輸出 sample output
ˆ_ˆ
資料範圍及提示 data size & hint
對於 30% 的資料滿足 1 ≤ n ≤ 12。
對於 100% 的資料滿足 1 ≤ n ≤ 50,1 ≤ t ≤ 20。
/*匈牙利演算法
題目比較繞 理解了比較簡單
在要住在學校的和在校生之間建邊
求最大匹配即可
*/#include
#include
#include
#define maxn 110
using
namespace
std;
intt,n,ans,tot;
inta[maxn][maxn];
intf[maxn],p[maxn];
intmatch[maxn];
intinit()
while(c>='
0'&&c<='9')
return x*f;
}void
clean()
int dfs(int
x) }
}return0;
}int
main()
for(int i=1;i<=n;i++)
}for(int i=1;i<=n;i++)
}if(ans==tot)printf("
^_^\n");
else printf("
t_t\n");
}return0;
}
假期的宿舍
假期的宿舍 二分圖匹配 最大流 做到candy 這道題,用a 寫了半天tle了,去網上搜題解,都是網路流的做法。問艾神用搜尋做該怎麼剪枝,艾神說他寫的書上有講很多剪枝策略,然而最快三天後書才能到.所以就先試試網路流了。之前沒怎麼接觸過網路流,看了半天才看懂一些,於是就拿這題入門了。這題是二分圖匹配的...
假期的宿舍 C
題目描述 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複...
BZOJ1433假期的宿舍
1433 zjoi2009 假期的宿舍 對於30 的資料滿足1 n 12。對於100 的資料滿足1 n 50,1 t 20。請原諒我沒有1a。首先多組資料,每次需要memset。然後建圖的問題。讀入的矩陣如果是1或者i j,就把i向j n連邊。流量為1 在校的向源點連邊。需要床位的向匯點連邊。記錄一...