封锁阳光大学,洛谷之提高历练地,图的遍历

正题

      第二题:封锁阳光大学

      这道题看上去好像想到了网络流最小割??

      其实不用那么麻烦,用染色法,如果图中的肯定黑白相间,那么就有两种状态,选黑的点,选白的点,看一下哪一种点数比较少,就直接输出即可。

      如果把每个点设置一个点权,那么就肯定要用最小割来做咯。。

代码<哇这个简洁>

// luogu-judger-enable-o2
#include
#include
#include
#include
using namespace std;

int n,m;
struct edge{int y,next;};
edge s[200010];
int first[10010];
int len=0;
int now[10010];
queue f;

void ins(int x,int y)
{
    len++;
    s[len].y=y;s[len].next=first[x];first[x]=len;
}

int bfs(int x)
{
    f.push(x);
    int totx=1,toty=0;
    now[x]=0;
    while(!f.empty())
    {
        int x=f.front();
        f.pop();
        for(int i=first[x];i!=0;i=s[i].next)
        {
            int y=s[i].y;
            if(now[y]==now[x]) return -1;
            if(now[y]==((now[x]+1)%2)) continue;
            now[y]=(now[x]+1)%2;
            if(now[y]==1) toty++;
            else totx++;
            f.push(y);
        }
    }
    return totx

你可能感兴趣的:(封锁阳光大学,洛谷之提高历练地,图的遍历)