這道題分析下就會發現是乙個二分圖匹配。將在校(包括來校訪友)和床單構成圖,判斷最大匹配數是否為總在校人數即可。
這裡用的是$km$演算法。
1 #include 23using
namespace
std;45
#define re register
6#define rep(i, a, b) for (re int i = a; i <= b; ++i)
7#define repd(i, a, b) for (re int i = a; i >= b; --i)
8#define maxx(a, b) a = max(a, b);
9#define minn(a, b) a = min(a, b);
10#define ll long long
11#define inf (1 << 30)
1213 inline int
read()
1920
const
int maxn = 50 + 5;21
22int e[maxn << 1][maxn << 1
], n, t, a[maxn];
2324
int lk[maxn << 1], v[maxn << 1
];25
26bool find(int
u) 34}35
return
false;36
}3738int
main()
57 rep(i, n+1, n<<1) if (lk[i]) ans--;
58if (ans <= 0) printf("
^_^\n
"); else printf("
t_t\n");
59}6061
return0;
62 }
這道題我提交了好幾次,總是$wa$。經過仔細的除錯(瞪眼觀察法),發現第$49$行中:
$a[i+n] = read() == 0 || a[i] == 0;$
寫的是$a[i+n] = a[i] == 0 || read() == 0;$
$||$運算是短路運算,如果$a[i]=0$成立,就不會讀入了。
ZJOI2009 假期的宿舍
題目描述 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複...
ZJOI2009 假期的宿舍
題目 洛谷p2055 bzoj1433 codevs2347。題目大意 有n個人,有些人是學生,有些人是來看學生的 不是學生 學生有床,而非學生沒有 廢話!有些學生回家,有些學生晚上住校,來看學生的人要住在學校裡。現在有一些認識的關係,規定每個要在學校睡覺的人只會睡在自己認識的人的床上,問能否使所有...
ZJOI2009 假期的宿舍
學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複雜,有的人...