为啥这样不对
查看原帖
为啥这样不对
690243
houluyu楼主2024/11/26 20:51

同样是标记当前这次u到的点,直接用dfn[v]=u就对了,而用bitset标记就错了,为啥啊

/*
只会在最低级的点被统计 

*/
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define pb push_back
using namespace std;

const int N = 200005;
int n, m; 
vector<vector<int> > g(N), gg(N); 
int deg[N];
int u[N], v[N];
ll tot, cnt;
ll ans;
int s[N];


signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for(int i = 1; i <= m; i ++)
	{
		cin >> u[i] >> v[i];
		deg[u[i]] ++;
		deg[v[i]] ++;
	}
	for(int i = 1; i <= m; i ++)
	{
		int l = u[i], r = v[i];
		if(deg[l] != deg[r])
		{
			if(deg[l] < deg[r])swap(l, r);
		}
		else
		{
			if(l < r)swap(l, r);
		}
		g[l].push_back(r);
	}
	for(int u = 1; u <= n; u ++)//这个作为最low的点 
	{
		s.reset(0);
		cnt = 0;
		for(auto v : g[u])
		{
			s[v] = 1;
		}
		for(auto v : g[u])
		{
			for(auto w : g[v])
			{
				if(s[w] == u)cnt ++;
			}
		}
//		cout << u << ' ' << cnt << endl;
		ans += cnt;
	}
	cout << ans;
	return 0;	
}

这是错误代码,不明白为啥

2024/11/26 20:51
加载中...