POJ 2942 点双联通+二分图染色

点击打开链接

题意:给n个骑士和m对关系,关系是互相仇恨,现在召开一个圆桌会议,要求相邻的两个人不能有仇恨关系,问有多少骑士不管怎么分配都不能参加会议

思路:白书上的经典例题

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const int maxn=1010;//注意点的编号从0开始的
struct edge{
    int u,v;
    edge(int a,int b){u=a;v=b;}
};
int pre[maxn],iscut[maxn],bccno[maxn],dfs_clock,bcc_cnt,n,m;
vectorG[maxn],bcc[maxn];
stackS;
int dfs(int u,int fa){
    int lowu=pre[u]=++dfs_clock;
    int child=0;
    for(unsigned int i=0;i=pre[u]){
                iscut[u]=1;bcc_cnt++;bcc[bcc_cnt].clear();
                while(1){
                    edge x=S.top();S.pop();
                    if(bccno[x.u]!=bcc_cnt) bcc[bcc_cnt].push_back(x.u),bccno[x.u]=bcc_cnt;
                    if(bccno[x.v]!=bcc_cnt) bcc[bcc_cnt].push_back(x.v),bccno[x.v]=bcc_cnt;
                    if(x.u==u&&x.v==v) break;
                }
            }
        }else if(pre[v]

你可能感兴趣的:(图论,强联通分量,二分图,无向图割点桥与块)