【codeforces 789D】Weird journey
【题目链接】: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的更多相关文章
- 【codeforces 779B】Weird Rounding
[题目链接]:http://codeforces.com/contest/779/problem/B [题意] 问你要删掉几个数字才能让原来的数字能够被10^k整除; [题解] /* 数字的长度不大; ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【cf789D】Weird journey(欧拉路、计数)
cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...
- 【codeforces 757B】 Bash's Big Day
time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...
- 【codeforces 604D】Moodular Arithmetic
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 750B】New Year and North Pole
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【27.40%】【codeforces 599D】Spongebob and Squares
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
随机推荐
- android Service not registered
Caused by: java.lang.IllegalArgumentException: Service not registered:com.broadcom.bt.app.settings.S ...
- Java获取路径中的文件名(正则表达式)
Java获取路径中的文件名(正则表达式) 目标 在这个路径中我想得到model2 /E:/2017-02-21--SoftWare/github/test/Java/poiDemo_word2exce ...
- ningbooj--1655--木块拼接(贪心)
[1655] 木块拼接 时间限制: 1000 ms 内存限制: 65535 K 问题描述 好奇的skyv95想要做一个正方形的木块,现在有三种颜色的矩形木块,颜色分别为"A" ...
- 解析HTML文件
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- from bs4 import BeautifulSoup import operator import ...
- CVTE面经
神一般的面试经历.也算面了不少公司,没见过这种面试. 一面:三个同学对应一个面试官,同一个问题依次作答. 1.为什么投递这个岗位? 答:blablabla... 2.最难忘的成功项目? 答:blabl ...
- android平台 cocos2d-x 读取相册数据
现已解决 方案如下: 1.使用 jni 调用 java 方法 启动相册选择框2.使用java将获取的图片保存到本地3.使用Cocos2d-x中 CCImage 读取 JAVA代码如下: //启动图片选 ...
- Linux通信之异步通知模式
[参考]韦东山 教学笔记 为了使设备支持异步通知机制,驱动程序中涉及以下3项工作:1. 支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID. 不过此项工 ...
- 利用string 字符串拷贝
序言:对于laws的代码,完全从Matlab中转来.其中用到了字符串复制和对比的函数. C++要求: 输入字符串,根据字符串,来确定选择数组,用于下一过程 MatLab代码: (1).文件calLaw ...
- c#日期计算
/// <summary> /// 计算日期的间隔(静态类) /// </summary> public static class dateTimeDiff { /// < ...
- js手机移动端选择插件 mobileSelect.js
一.mobileSelect获取方法 mobileSelect支持单选.多级联动.自定义回调函数.二次渲染.最新版本下载地址[2017-09-21更新]: https://github.com/onl ...