zoukankan      html  css  js  c++  java
  • SCU

    Vertex Cover

    frog has a graph with (n) vertices (v(1), v(2), dots, v(n)) and (m) edges ((v(a_1), v(b_1)), (v(a_2), v(b_2)), dots, (v(a_m), v(b_m))).

    She would like to color some vertices so that each edge has at least one colored vertex.

    Find the minimum number of colored vertices.

    Input

    The input consists of multiple tests. For each test:

    The first line contains (2) integers (n, m) ((2 leq n leq 500, 1 leq m leq frac{n(n - 1)}{2})). Each of the following (m) lines contains (2) integers (a_i, b_i) ((1 leq a_i, b_i leq n, a_i eq b_i, min{a_i, b_i} leq 30))

    Output

    For each test, write (1) integer which denotes the minimum number of colored vertices.

    Sample Input

        3 2
        1 2
        1 3
        6 5
        1 2
        1 3
        1 4
        2 5
        2 6

    Sample Output

        1
        2
    #include <bits/stdc++.h>
    #define mp make_pair
    #define pb push_back
    #define met(a,b) memset(a,b,sizeof a)
    using namespace std;
    typedef long long ll;
    typedef pair<int,int>pii;
    const int N = 1e5+5;
    const double eps = 1e-8;
    int T,n,cnt,m;
    bool ok=true;
    int k,mi[N];
    int a[N],vis[N],match[N];
    char str[N],s[N];
    vector<int>edg[N];
    bool dfs(int now){
        for(int i=0;i<edg[now].size();++i){
            int x=edg[now][i];
            if(!vis[x]){
                vis[x]=1;
                if(!match[x]||dfs(match[x])){
                    match[now]=x;
                    match[x]=now;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        int u,v;
        while(~scanf("%d%d",&n,&m)){
            for(int i=0;i<N;i++)edg[i].clear(),match[i]=0;
            int ans=0;
            while(m--){
                scanf("%d%d",&u,&v);
                edg[u].pb(v);
                edg[v].pb(u);
            }
            for(int i=1;i<=n;i++){
                if(!match[i]){
                    met(vis,0);
                    if(dfs(i))ans++;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
     
  • 相关阅读:
    UISearchBar的常用代理
    iOS 上传图片压缩大小设置
    __weak typeof(self)weakSelf = self;的解释和使用
    运动事件(MotionEvent)
    iOS 获取当前window
    保留小数
    ios 转图片
    iOS提示弹窗
    iOS 获取ip地址
    微信小程序 watch监听数据变化 类似vue中的watch
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6791415.html
Copyright © 2011-2022 走看看