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;
}
原文地址:https://www.cnblogs.com/qq2210446939/p/12792877.html