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;
    }
     
  • 相关阅读:
    java冒泡排序
    正则表达式手册
    简单介绍事务
    Java经典编程30题(中)
    Java经典编程30题(下)
    负载均衡-Nginx
    react入门
    Mybatis && Mybatis-plus
    java设计模式-委派模式
    java8新特性
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6791415.html
Copyright © 2011-2022 走看看