WA了10个点,求大佬调
查看原帖
WA了10个点,求大佬调
560335
JACK2021楼主2023/7/25 10:03

去除所有不对的边

#include <bits/stdc++.h>
using namespace std;
#define p_qu priority_queue
#define p_qu_less priority_queue<int, vector<int>, greater<int> >
#define C_in(a,n) for(int i=0;i<n;i++) cin>>a[i]
#define C_out(a,n) for(int i=0;i<n;i++) cout<<a[i]<<" "
#define SUM(a,n,sum) sum[0]=a[0];for(int i=1;i<n;i++) sum[i]=sum[i-1]+a[i];
#define SUM2(a,n,m,sum) sum[0][0]=a[0][0]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) sum[i][j]=(i!=0?sum[i-1][j]:0)+(j!=0?sum[i][j-1]:0)+a[i][j]-(i!=0 && j!=0?sum[i-1][j-1]:0)
#define all(a) a.begin(),a.end()
#define l_b lower_bound
#define u_b upper_bound
#define pb push_back
#define max_3(a,b,c) max(max(a,b),c)
#define max_4(a,b,c,d) max(a,max_3(b,c,d))
#define min_3(a,b,c) min(min(a,b),c)
#define min_4(a,b,c,d) min(a,min_3(b,c,d))
#define zero(a) memset(a, 0, sizeof(a))
#define msit multiset<int>::iterator
#define setit set<int>::iterator
#define int long long
const int N=500005;
int h_c=0;
vector<int> g[N];
int vis[N];
int last[N];
int b,w;
int ok=0;
void have_c(int now,int fa)
{
	//cout<<now<<" "<<h_c<<endl;
	if(vis[now])
	{
		if((h_c-last[now])%2==1) 
		{
			cout<<0;
			ok=1;
		} 
		return;
	}
	last[now]=h_c;
	vis[now]=1;
	h_c++;
	for(int i=0;i<g[now].size();i++)
	{
		if(g[now][i]==fa) continue;
		have_c(g[now][i],now);
	}
	h_c--;
}
void dfs(int now,int lc)
{
	if(vis[now])
	{
		return;
	}
	lc+=1;
	lc%=2;
	if(lc==1) b++;
	else w++;
	vis[now]=1;
	for(int i=0;i<g[now].size();i++)
	{
		dfs(g[now][i],lc);
	}
	return;
}
int n,m;
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int u,v;
		cin>>u>>v;
		g[u].pb(v);
		g[v].pb(u);
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i]) have_c(i,-1);
	}
	if(ok) return 0;
	zero(vis);
	int ans=(n*(n-1)/2)-m;
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			b=w=0;
			dfs(i,0);
			//cout<<b<<" "<<w<<endl;
			ans-=(w*(w-1)/2);
			ans-=(b*(b-1)/2);
		}
	}
	cout<<ans;
	return 0;
}
2023/7/25 10:03
加载中...