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;
    }
     
  • 相关阅读:
    如何获取汉字对应的拼音
    php each()函数和list()函数
    php list()函数
    addslashes给预定义字符前面加上反斜杠
    array_filter() 过滤数组中的空白元素
    用.htaccess文件实现URL重写
    xml中实体引用
    onsubmit阻止表单提交
    php获取当前文件绝对路径
    array_merge() 函数的用法
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6791415.html
Copyright © 2011-2022 走看看