二分图染色判断
二分图染色判断
判断图中不存在奇数环
O(n+m)
//P1155
# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e3+100;
vector<int> G[MAXN];
int color[MAXN];
int bipart(int u)
{
int len=G[u].size();
for(int i=0;i<len;++i){
int v=G[u][i];
if(color[v]==color[u]) return 0;
if(!color[v]){
color[v]=3-color[u];
if(!bipart(v)) return 0;
}
}
return 1;
}
int a[MAXN],f[MAXN];
stack<int> s1,s2;
int main()
{
int N; scanf("%d",&N);
for(int i=1;i<=N;++i){
scanf("%d",&a[i]);
f[i]=a[i];
}
for(int i=N-1;i>=1;i--){
f[i]=min(f[i],f[i+1]);
}
for(int i=1;i<N;++i){
for(int j=i+1;j<N;++j){
if(a[i]<a[j]&&f[j+1]<a[i]){
G[a[i]].push_back(a[j]);
G[a[j]].push_back(a[i]);
}
}
}
for(int i=1;i<=N;++i){
if(!color[a[i]]){
color[a[i]]=