同样是标记当前这次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;
}
这是错误代码,不明白为啥