1. 程式人生 > >joyoi1957 「Poetize5」Vani和Cl2捉迷藏

joyoi1957 「Poetize5」Vani和Cl2捉迷藏

覆蓋 include names ostream eof scan 最大 return inline

最小路徑可重點覆蓋。先傳遞閉包,然後拆點,\(n-\)最大匹配,看算法競賽進階指南。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, m, uu, vv, mat[205], ans;
bool w[205][205], vis[205];
bool hung(int x){
    for(int i=1; i<=n; i++)
        if(w[x][i]){
            if(vis[i])  continue;
            vis[i] = true
; if(!mat[i] || hung(mat[i])){ mat[i] = x; return true; } } return false; } int main(){ cin>>n>>m; for(int i=1; i<=m; i++){ scanf("%d %d", &uu, &vv); w[uu][vv] = true; } for(int
k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) w[i][j] |= w[i][k] & w[k][j]; for(int i=1; i<=n; i++){ memset(vis, 0, sizeof(vis)); if(hung(i)) ans++; } cout<<n-ans<<endl; return 0; }

joyoi1957 「Poetize5」Vani和Cl2捉迷藏