描述

遥远的星系中共有n颗行星,由m个双向虫洞所连接。两颗不同行星间最多
有1个虫洞直接相连,但一个虫洞的两端可能连接同一颗行星。一条星际旅行的
航线需要满足以下要求:从任意一颗行星出发,在任意一颗行星上结束,总共
经过m − 2个虫洞恰好2次,经过2个虫洞恰好1次。现在我们想要知道,有多少
种本质不同的旅行航线。两条航线被认为本质不同,当且仅当至少存在一个虫
洞,在两条航线中经过的次数不同。

输入

第一行两个整数n, m,表示行星和虫洞的数量。
接下来m行,每行两个整数u, v,表示存在一个双向虫洞直接连接u和v。
每一个虫洞最多会被描述一次。

输出

一行一个整数,代表本质不同的航线的数量。

样例

输入

5 4
1 2
1 3
1 4
1 5

输出

6

样例解释:本质不同的航线有6条:
• 2 - 1 - 3 - 1 - 4 - 1 - 5
• 2 - 1 - 3 - 1 - 5 - 1 - 4
• 2 - 1 - 4 - 1 - 5 - 1 - 3
• 3 - 1 - 2 - 1 - 5 - 1 - 4
• 3 - 1 - 2 - 1 - 4 - 1 - 5
• 4 - 1 - 2 - 1 - 3 - 1 - 5
注意 2 - 1 - 4 - 1 - 3 - 1 - 5 不是另一个本质不同的航线,它与第一条航线是本
质相同的。
2

限制与约定

对于10%的数据,n, m ≤ 5。
对于20%的数据,n, m ≤ 10。
对于40%的数据,n, m ≤ 100。
对于60%的数据,n, m ≤ 1000。
对于所有数据,1 ≤ n, m ≤ 10^5,1 ≤ u, v ≤ n。

思路

由于m-2条边为2次,2条边1次,则其一定为一个连通图。
则若其不为连通图,即可以直接输0。(必须为 边的连通图

当我们已经确定其为一个边的连通图后。

假设没有自环,考虑怎么做。假设我们从某点出发(大联通块内的点),经过m-2条边2次,2条边1次。
将此图每一条边都变成两条边(满足题意,此时每个点的出度都为偶数),则根据欧拉回路性质,我们从此点出发,必定会回到此点,则往回走两步(非同一条边),即为一个合法路径。

加入自环,将自环分离出来,若有一个自环,则其贡献方案数为非自环边数与总自环数-1(减去本身),即经过此点时走一次自环,再枚举剩下的任意一条边(包括自环),即从那条边任意端点往外出发,经过此自环时走一次的路径。

方案数即为以上情况(0自环,1自环,2自环)(但要注意判重)。

Code

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int MAXN=100005;
int n,m,vis[MAXN],fig[MAXN];
vector<int>P[MAXN];
long long ans,fx1,fx2;
void dfs(int u,int fa){vis[u]=1;int size=P[u].size();for(int i=0;i<size;i++){int v=P[u][i];if(v==fa)continue;if(vis[v])continue;dfs(v,u);}
}
int main(){//freopen("tour.in","r",stdin);//freopen("tour.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1,x,y;i<=m;i++){scanf("%d%d",&x,&y);if(x!=y){fx1++;P[x].push_back(y);P[y].push_back(x);}else fx2++,fig[x]=1;}for(int i=1;i<=n;i++)if(P[i].size()){dfs(i,0);break;}for(int i=1;i<=n;i++)if(P[i].size()&&!vis[i]){printf("0\n");return 0;}for(int i=1;i<=n;i++)if(!P[i].size()&&fig[i]){printf("0\n");return 0;}for(int i=1;i<=n;i++){int size=P[i].size();for(int j=0;j<size;j++){int v=P[i][j];ans+=P[v].size()-1;}}ans+=fx2*fx1*2+fx2*(fx2-1);printf("%lld\n",ans/2);
}

【CQBZ模拟赛】星际旅行相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 2017.6.11 校内模拟赛

    题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...

  3. 2020年蓝桥杯模拟赛2020.3.25直播笔记

    2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...

  4. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  6. 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】

    蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载[2013年(第4届)~2021年(第12届)] 百度网盘-CSDN蓝桥杯资料(真题PDF+其它资料)   提取码:6666 2013年 ...

  7. 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  8. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  9. 模拟赛-20190114-新魔法(distance)

    前言 第一篇模拟赛题思路总结 题目相关 题目链接 题目大意 给定一个长度为nnn序列,每一个位置iii都有一种颜色aia_iai​ 现在有mmm次操作,操作分两种: 第一种操作,将所有颜色xxx都替换 ...

最新文章

  1. BZOJ4161 常系数齐次线性递推
  2. bandizip最后一个无广告版本_如果非要选择一款压缩软件的话——Bandizip
  3. arch linux 安装xfce_华为荣耀Magicbook安装Manjaro系统指北
  4. C语言------指针
  5. dell装双系统linux系统,记录DELL灵越7590/7591安装Ubuntu+Win10双系统
  6. win7计算机时间显示错误,win7系统时间调不对的解决方法
  7. 同一个WiFi,电脑不能访问CSDN网站,手机却可以,换一个网络电脑就可以是什么原因?
  8. 网络带宽压力测试教程
  9. BaseRecyclerViewAdapterHelper开源项目之BaseSectionQuickAdapter 实现Expandable And collapse效果的源码学习...
  10. Python爬虫—爬取京东商品信息(自动登录,换关键词,换页)
  11. 软件渗透测试:定义、需求、过程
  12. 「网络安全」将会是下一个风口?这个“下饭神剧”值得一看!
  13. jQuery读取Table表格数据
  14. 软件测试英语单词词汇
  15. vmware安装linux虚拟机
  16. C语言之运算符练习题
  17. 配置管理--版本控制的目的
  18. 领英达到每周好友邀请上限怎么办?领英加好友时要注意哪些细节?置顶推荐
  19. Android实现app启动页面设计
  20. SEO外链推广,域名权重与相关性链接,谁重要?

热门文章

  1. zjfc---1120 对称串
  2. thinkphp5.1的行为钩子
  3. 解决普通笔记本无法连接iPhone热点的问题
  4. 专门为u盘设计的linux系统
  5. Python灰帽子——黑客与逆向工程师的Python编程之道pdf百度云
  6. 前装车载手机无线充电搭载“翻倍”增长,市场份额争夺战白热化
  7. 项目管理 - PM、 SRS、SOW简介及范例
  8. ORACLE 删除归档日志连接rman查看归档日志占有率
  9. system磁盘占有率太高,进入桌面一直无法使用
  10. 实时3D图形技术的进化历史2