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;
    }
     
  • 相关阅读:
    mysql定时器,定时查询数据库,把查询结果插入到一张表中 阿星小栈
    如何写mysql的定时任务 阿星小栈
    利用mysql游标循环结果集 阿星小栈
    页面可见生Page Visibility
    css之z-index
    css之页面三列布局之左右两边宽度固定,中间自适应
    css之页面两列布局
    jquery源码学习之extend
    jquery源码学习之queue方法
    HTTP状态码详解
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6791415.html
Copyright © 2011-2022 走看看