zoukankan      html  css  js  c++  java
  • Luogu P1330 封锁阳光大学

      这是一道神坑题!

      刚开始看了题还以为是Tarjan(我也不知道Tarjan有什么用)。

      然后发现这是染色问题的模板题!

      找到没有染色的点,然后将它涂成1(一共只有1,2两种颜色)

      与它相连的点进行广搜,如果没有颜色染成与它不同的颜色。

      如果已经有颜色且颜色相同,输出impossible。

      然后两个颜色取最小值累加即可。

      CODE

    #include<bits/stdc++.h>
    using namespace std;
    inline void read(int &x)
    {
        x=0; char ch=getchar();
        while (ch<'0'||ch>'9') ch=getchar();
        while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    }
    const int N=10005,M=100005;
    vector <int> a[N];
    int col[N],n,m,x,y,i,ans,q[N*2+10];
    void bfs(int x)
    {
        col[x]=1;
        int c1=1,c2=0,head=0,tail=1;
        q[1]=x; 
        while (head<tail)
        {
            int now=q[++head];
            for (int i=0;i<a[now].size();++i)
            {
                int k=a[now][i];
                if (col[k]==0)
                {
                    if (col[now]==1) { col[k]=2; c2++; } else { col[k]=1; c1++; }
                    q[++tail]=k;
                } else if (col[k]==col[now]) { puts("Impossible"); exit(0); }
            }
        }
        ans+=min(c1,c2);
    }
    int main()
    {
        read(n); read(m);
        for (i=1;i<=m;++i)
        {
            read(x); read(y);
            a[x].push_back(y); a[y].push_back(x);
        }
        for (i=1;i<=n;++i)
        if (!col[i]) bfs(i);
        printf("%d",ans);
        return 0;
    }

      至于为什么要开万能头文件,因为我不知道exit()的库。

    辣鸡老年选手AFO在即
  • 相关阅读:
    Proj THUDBFuzz Paper Reading: PMFuzz: Test Case Generation for Persistent Memory Programs
    入围 WF 后训练记
    算法竞赛历程
    2021 多校 杭电 第十场
    2021 多校 杭电 第九场
    2021 多校 牛客 第十场
    2021 多校 牛客 第九场
    2021 多校 杭电 第八场
    2021 多校 杭电 第六场
    2021 多校 杭电 第七场
  • 原文地址:https://www.cnblogs.com/cjjsb/p/7899327.html
Copyright © 2011-2022 走看看