正解欧拉路,其实看完题解还是挺简单的,由于对欧拉路这种东西没怎么接触过,所以考试时没想出来,知识还是有漏洞啊。

另外这题的题解写的也不是很清楚(可能大佬作者觉得这是一道送分题……),首先判断联通(注意是边联通,即使是有一个点孤立也不会影响方案数),可以用dfs或并查集,注意dfs有一个坑点,不要直接就从1开始搜,因为1可能是那个被孤立的点。然后就可以求方案数了:

将无向图拆成双向边,显然每个点的度为偶数,是欧拉路,那么问题就转化成了从中去掉两条边使其仍然是欧拉路,题目中特别提醒了自环,所以分三种情况:

1.去掉两个自环,显然还是欧拉路,ans+=(num)*(num-1)/2;然而我一开始忘了除二(之前犯过的错误,该打)。

2.去掉一个自环和一条普通边,自环显然没问题,但是去掉普通边之后仍然是欧拉路吗?可以从去掉的那条边的反边起点开始走过去,那么每个点的度数仍然为偶数,仍然为欧拉路,ans+=num*(m-num);

3.剩下去掉普通边的情况了,怎么去才合法呢?去掉一个点的一条入边和一条出边,那么显然仍然是欧拉路,证明同上。去掉其他边呢?并不满足题意。所以ans+=$C_{du_i}^{2}$。

#include<iostream>
#include<cstdio>
#define MAXN 100100
#define int LL
#define LL long long
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
struct edge
{
int u,v,nxt;
#define u(x) ed[x].u
#define v(x) ed[x].v
#define n(x) ed[x].nxt
}ed[MAXN*4];
int first[MAXN],num_e;
#define f(x) first[x]
int n,m;
LL C[500010][5];
void get_C()
{
C[0][0]=1;
for(int i=1;i<=500000;i++)
{
C[i][0]=1;
for(int j=1;j<=min(i,4);j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
bool v[MAXN],ve[MAXN*4];
void pd(int x,int fa)
{
v[x]=1;
for(int i=f(x);i;i=n(i))
{
ve[i]=1;
if(v(i)!=fa&&!v[v(i)])pd(v(i),x);
}
}
int num,ans;
int du[MAXN];
inline int read();
inline void add(int u,int v);
signed main()
{
get_C();
n=read(),m=read();int a,b;
for(int i=1;i<=m;i++)
{
a=read(),b=read();
add(a,b);add(b,a);
if(a==b)num++;
else du[a]++,du[b]++;
}
for(int i=1;i<=n;i++)if(du[i]){pd(i,0);break;}
for(int i=1;i<=num_e;i++)if(!ve[i]){puts("0");return 0;}
ans+=num*(num-1)/2;
ans+=num*(m-num);
for(int i=1;i<=n;i++)
ans+=C[du[i]][2];
cout<<ans<<endl;
}
inline void add(int u,int v)
{
++num_e;
u(num_e)=u;
v(num_e)=v;
n(num_e)=f(u);
f(u)=num_e;
}
inline int read()
{
int s=0;char a=getchar();
while(a<'0'||a>'9')a=getchar();
while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();}
return s;
}

HZOJ 星际旅行的更多相关文章

  1. Bzoj1917 [Ctsc2010]星际旅行

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 185  Solved: 118 Description 公元3000年,地球联盟已经攻占了银河系内的N ...

  2. 7.18 NOIP模拟测试5 星际旅行+砍树+超级树

    T1 星际旅行 题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案.本质不同:当且仅当至少存在一条边经过次数不同. 题解:考试的时候理解错题,以为他是 ...

  3. 「题解」:07.18NOIP模拟赛T1:星际旅行

    问题 A: 星际旅行 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 考试心路历程 拿到这道题感觉很懵逼,所以先搞的T2和T3,最后码了个暴力,结果还不如直接输出‘0’得分高 ...

  4. noip模拟8[星际旅行·砍树·超级树·求和]

    也不能算考得好,虽然这次A了一道题,但主要是那道题太简单了,没啥成就感,而且有好多人都A掉了 除了那一道,其他的加起来一共拿了25pts,这我能咋办,无奈的去改题 整场考试的状态并不是很好啊,不知道是 ...

  5. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  6. NOIP模拟测试5「星际旅行·砍树·超级树」

    星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...

  7. hzoj 2301(莫比乌斯反演)

    题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定 ...

  8. [CTSC2010]星际旅行

    https://www.luogu.org/problemnew/show/P4189 题解 模拟费用流. 首先有一个非常好的条件,每个点的限制次数都大于等于这个点的度数. 然后我们可以从\(0\)开 ...

  9. 星际旅行(欧拉路,欧拉回路)(20190718 NOIP模拟测试5)

    瞎搞了一个ans+=du*(du-1)/2 wa20分,好桑心(话外音:居然还有二十分,出题人太周到了) 还是判欧拉路 题解没太仔细想,感觉还是kx的思路明白 具体就是:因为每条边要走两遍,可以把一条 ...

随机推荐

  1. tesseract训练手写体

    前面的步骤都一样,从第4步开始 4.使用tesseract生成.box文件: tesseract eng.handwriting.exp0.tif eng.handwriting.exp0 -l en ...

  2. python基础--魔法方法、迭代器、上下文管理

    isinstance:判断一个对象是否是某个类的实例 参数一:要判断的对象 参数二:要判断的类型 issubclass:判断一个类是否是另一个类的子类 参数一:是待判断的子类 参数二:待判断的父类 _ ...

  3. java学习补全 1

    CLASSPATH java执行命令时利用此路径加在需要的.class文件 字符串常量就是String 类的匿名对象 String类在直接复制的情况下只会保留一块堆内存 a="hhh&quo ...

  4. 未加星标 ajax三级联动的实现方法

    <div id="sanji"></div> 下面考虑的是要有省市区这三列,这三列用的是下拉列表,那么里面要用<option></opti ...

  5. excel一些常用的函数

    函数分类: 关联匹配类 清洗处理类 逻辑运算类 计算统计类 时间序列类 一.关联匹配类 经常性的,需要的数据不在同一个excel表或同一个excel表不同sheet中,数据太多,copy麻烦也不准确, ...

  6. 微信小程序制作选项卡

    wxml: <view class="tab"><view class="tab-title" bindtap="tabFun&qu ...

  7. webserver的性能问题,一语道破真谛

    一直纠结我们要大减的paas平台需要支持多大的并发数. 看到一个网友所说的,恍然大悟,按原有我的理解和要求,并发达到w级 req/s,已经是非常高的要求了,单纯从软件上是很难实现的,一定要以来硬件上的 ...

  8. 第三十一讲:UML类图(上)

    类名 成员变量:属性 成员函数:方法 访问权限-属性名-属性的类型 访问权限-方法名-返回值,还可以传递参数列表. 继承类的类图 JAVA里面类的访问权限只有两种:package(默认的访问权限)和p ...

  9. at: 安排一个任务在未来执行,需要一个atd的系统后台进程

    检查atd进程是否启动 [root@centos61 桌面]# service atd status atd (pid  2274) 正在运行... [root@centos61 桌面]# chkco ...

  10. [PHPCMS V9二次开发]自定义字段模型-添加字段类型

    步骤/方法 打开phpcms\modules\content\fields目录,复制文件夹downfiles,并改名为textgroups. 打开phpcms\modules\content\fiel ...