二分图求调(悬关)
  • 板块灌水区
  • 楼主Martlet
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/8 19:32
  • 上次更新2024/8/8 20:29:49
查看原帖
二分图求调(悬关)
543717
Martlet楼主2024/8/8 19:32

WA 题目传送门

#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> g[200010];
int d[200010],c1,c2,ans;
bool dfs(int u,int color){
	//cout<<u<<endl;
	d[u] = color;
	if(color == 1)c1++;
	else c2++;
	for(int v:g[u]){
		if(d[v] == 0&&!dfs(v,-color) ){
			return 0;
		}
		else if(d[v] == color){
			return 0;
		}
	}
	return 1;
}
int ans1,ans2;
signed main(){
	int n,m;
	cin>>n>>m;
	for(int i = 1;i <= m;i++){
		int u,v;
		cin>>u>>v;
		g[u].push_back(v); 
		g[v].push_back(u); 
	}
	for(int i = 1;i <= n;i++){
		if(!d[i]){
			c1 = c2 = 0;
			if(dfs(i,1) == 0){
				cout<<0;
				return 0;
			}
			ans1+=c1*c2;
			int s = c1+c2;
			ans2+= n*(n-s);
		}
	}
	cout<<ans1+ans2/2-m;
    return 0;
}

2024/8/8 19:32
加载中...