【题目链接】:http://codeforces.com/problemset/problem/789/D

【题意】



给你n个点,m条边;

可能会有自环

问你有没有经过某两条边各一次,然后剩余m-2条边,每条边各2次的

遍历方案,有的话输出方案数

【题解】

/*
把每条边都复制一条相同的边;
然后问题就能转化为在2*m条边中,去掉两条边;
然后使得剩下的图能够进行一笔画(每条边都只经过一次)
则使奇点的个数为0或为2就好了;
考虑自环边和普通边;
对于普通边来说:
①如果删掉的两条普通边是不相邻的两条边;
那么会有4个点变成奇点->排除
②如果删掉的两条普通边是相邻的两条边
则x-y-z中x和z会变成奇点;y仍旧是偶点;
刚好形成了两个奇点->符合要求
③考虑两条不同的自环边,如果删掉之后
每条自环边的端点两边都是同一个点,则每个点度数都减少2;
则每个点还都是偶点->奇点个数为0->符合
④一条自环边和一条普通边
普通边两边的点都变成奇点
->自环边两边的点是同一个点那个点度数-2还是偶点;
->总共两个奇点
还是符合题意
综上只要考虑
自环边和自环边
相邻的普通边
自环边和普通边
3种情况
如果没有联通的话得输出0
这里的联通只考虑m条边中出现过的点哦;
只要那些点联通就可以了

【Number Of WA】



3



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e6+100; int n,m,ltk;
int f[N];
LL zh,ptb,ans,bian[N];
bool bo[N]; int zbb(int x)
{
if (f[x]==x)
return x;
else
return f[x] = zbb(f[x]);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf就别用了!
cin >> n >> m;
ltk = n;
rep1(i,1,n) f[i] = i;
rep1(i,1,m)
{
int x,y;
cin >> x >> y;
bo[x] = true,bo[y] = true;
if (x==y)
{
zh++;
continue;
}
ptb++;
bian[x]++,bian[y]++;
int r1 = zbb(x),r2 = zbb(y);
if (r1!=r2)
{
ltk--;
f[r1] = r2;
}
}
rep1(i,1,n)
if (!bo[i])
ltk--;
if (ltk!=1)
return cout << 0 << endl,0;
//自环和自环
ans+=zh*(zh-1)/2;
//自环和普通边
ans+=zh*ptb;
//相邻的普通边
rep1(i,1,n)
ans+=bian[i]*(bian[i]-1)/2;
cout << ans << endl;
return 0;
}

【codeforces 789D】Weird journey的更多相关文章

  1. 【codeforces 779B】Weird Rounding

    [题目链接]:http://codeforces.com/contest/779/problem/B [题意] 问你要删掉几个数字才能让原来的数字能够被10^k整除; [题解] /* 数字的长度不大; ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【cf789D】Weird journey(欧拉路、计数)

    cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...

  4. 【codeforces 757B】 Bash's Big Day

    time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  5. 【codeforces 604D】Moodular Arithmetic

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【codeforces 750B】New Year and North Pole

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【27.40%】【codeforces 599D】Spongebob and Squares

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  9. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

随机推荐

  1. 我的Android进阶之旅------&gt;android中getLocationInWindow 和 getLocationOnScreen的差别

    View.getLocationInWindow(int[] location) 一个控件在其父窗体中的坐标位置 View.getLocationOnScreen(int[] location) 一个 ...

  2. 转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式

    日期比较对象 DayCompare 代码用到了  lombok ,如果不用,其实就是把getter / setter方法自己写一遍,还有构造方法. @Data @Builder public stat ...

  3. CF799B T-shirt buying

    题目大意 有一些衣服,它们有价格.正面的颜色和反面的颜色.现有一群顾客按顺序来买存在某颜色且价格最低的衣服(不存在则不会买),求每个顾客花了多少钱. 思路 #include <cstdio> ...

  4. 查看tensorflow pb模型文件的节点信息

    查看tensorflow pb模型文件的节点信息: import tensorflow as tf with tf.Session() as sess: with open('./quantized_ ...

  5. Codeforces--630C--Lucky Numbers(快速幂)

     C - Lucky Numbers Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536K ...

  6. E20170829-mk

    Parse   vt. 从语法上描述或分析(词句等); serial    adj. 连续的; 连载的; 顺序排列的; 分期偿付的; MultiThread n. 多线程; 多流; concurren ...

  7. Comet反向ajax技术实现客服聊天系统

    说明:Comet反向Ajax是在看了燕十八老师的视频以后,结合他讲解的例子,自己用ajax+java实现了一遍.在这里把代码贴出来,以供大家学习.同时,ajax轮询技术也可以用在消息推送的功能中,下次 ...

  8. css3 文本模型

    我前期是一名前端开发者,经常会遇到关于文本模型的问题,很多地方我们会经常遇到这种问题.例如栏目的标题,在设计师给我们图的时候并不会考虑到标题的长度,所以我们自己开发的过程中自己注意这一点. 首先和大家 ...

  9. 工具分享2:Python 3.6.4、文本编辑器EditPlus、文本编辑器Geany

    工具官网下载地址: https://www.python.org/downloads/ python 3.6.0下载链接: 链接:https://pan.baidu.com/s/1snuSxsx 密码 ...

  10. JQuery 兼容所有浏览器的复制到剪切板功能

    灵机一动想的点子,应该不难理解 <textarea onmousedown='selectAll(this);'>11111</textarea> function selec ...