大意:$n$结点$m$条边无向图, 满足
$(1)$经过$m-2$条边$2$次
$(2)$经过其余$2$条边$1$次
的路径为好路径, 求所有好路径数
相当于边加倍后再删除两条边, 求欧拉路条数
首先欧拉路径存在等价于奇数度点不超过2个
所以删除自环边一定成立,若删除两条非自环边, 则两边必须有公共点
特判下不连通输出0即可
#include <iostream>
#include <algorithm>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i) using namespace std;
typedef long long ll; const int N = 1e6+;
int deg[N], vis[N], s[N], n, m, k, cnt; int find(int x) {return s[x]?s[x]=find(s[x]):x;} int main() {
scanf("%d%d", &n, &m);
REP(i,,m) {
int u, v;
scanf("%d%d", &u, &v);
vis[u]=vis[v]=;
if (u==v) ++k;
else ++deg[u],++deg[v];
if ((u=find(u))!=(v=find(v))) s[u]=v,++cnt;
}
REP(i,,n) if (!vis[i]) ++cnt;
if (cnt<n-) return puts(""),;
ll ans = (ll)k*(m-k)+(ll)k*(k-)/;
REP(i,,n) ans += (ll)deg[i]*(deg[i]-)/;
printf("%lld\n", ans);
}