zoukankan      html  css  js  c++  java
  • Exits in Excess 有向图去环&思维

    传送门:https://vjudge.net/contest/370208#problem/E

    题意

      n个点m条边的有向图,最多删除m/2条边,要求删边后的有向图没有环,求删边的个数和删第几条边。

    思路

      设u<v的边集为A,u>v为B,我们删去A和B中小的那个边集就行,为什么呢?我们来看环的形成比如1 2 3这三个节点有1到2,2到3,3到1三条边成环,那么这些边必有u<v且有u>v,因为要首尾相接嘛,所以我们删去一个集合这个图就一定没有环了,那么为什么在m/2以内呢,因为是两个集合较少的那个嘛!

    AC代码

    #include<iostream>
    #include<vector>
    using namespace std;
    vector<int> A,B;
    int n,m,u,v;
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>u>>v;
            if(u<=v)
                A.push_back(i);
            else 
                B.push_back(i);
        }    
        if(A.size()<B.size()){
            cout<<A.size()<<'
    ';
            for(auto now:A)
                cout<<now<<'
    ';
        }
        else{
            cout<<B.size()<<'
    ';
            for(auto now:B)
                cout<<now<<'
    ';
        }
        return 0;
    }
  • 相关阅读:
    link和@import区别
    常用的正则表达式
    virtual dom
    git常用命令
    系统管理与进程命令
    Shell 命令
    软件安装命令
    vim 详解
    网络命令
    帮助与用户管理命令
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/12792877.html
Copyright © 2011-2022 走看看