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;
    }
     
  • 相关阅读:
    FPGA远程更新之限制条件
    异步FIFO格雷码与空满
    异步FIFO空满设计延迟问题
    从云端到边缘 AI推动FPGA应用拓展
    异步FIFO跨时钟域亚稳态如何解决?
    FPGA该如何应对ASIC的大爆发?
    AbstractQueuedSynchronizer概述
    ssh 解决经常断开与记住密码功能
    CentOS 7 Docker安装
    Redis设计与实现笔记
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6791415.html
Copyright © 2011-2022 走看看