2018.09.15 hdu3018Ant Trip(欧拉路)
传送门
显然答案等于各个连通分量的笔画数之和。
因此我们dfs每个连通分量计算对答案的贡献。
对于一个连通分量,如果本来就有欧拉回路那么只需要一笔。
否则需要寄点数/2那么多笔才能画完。
知道这个结论这题就很简单了。
代码;
#include<bits/stdc++.h>
#define N 100005
#define M 200005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n,m,first[N],ans,cnt,tot1,tot2,du[N];
bool vis[N];
struct edge{int v,next;}e[M<<1];
inline void add(int u,int v){e[++cnt].v=v,e[cnt].next=first[u],first[u]=cnt;}
inline void init(){
memset(first,0,sizeof(first));
memset(du,0,sizeof(du));
memset(vis,false,sizeof(vis));
cnt=ans=0;
}
inline void dfs(int p,int fa){
vis[p]=true,++tot1;
if(du[p]&1)++tot2;
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(vis[v])continue;
dfs(v,p);
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
init();
for(int i=1;i<=m;++i){int u=read(),v=read();++du[u],++du[v],add(u,v),add(v,u);}
for(int i=1;i<=n;++i){
if(!vis[i]){
tot1=tot2=0,dfs(i,0);
ans+=tot2?tot2/2:1;
}
}
printf("%d\n",ans);
}
return 0;
}
2018.09.15 hdu3018Ant Trip(欧拉路)的更多相关文章
- 2018.09.15 poj1734Sightseeing trip(floyd求最小环)
跟hdu1599差不多.. 只是需要输出方案. 这个可以递归求解. 代码: #include<iostream> #include<cstdio> #include<cs ...
- Lean Data Innovation Sharing Salon(2018.09.15)
时间:2018.09.15地点:北京国华投资大厦
- 2018.09.15 poj1041John's trip(欧拉路输出方案)
传送门 一个欧拉路输出方案的板子题. 竟然难在读入233. 代码: #include<iostream> #include<cstdio> #include<cstrin ...
- 2018.09.15点名器(简单dp)
描述 Ssoier在紧张的学习中,杜老师每天给他们传授精妙的知识. 杜老师为了活跃气氛,设计了一个点名器,这个点名器包含一个长度为M的数组(下标1开始),每个元素是一个oier的名字,每次点名的时候, ...
- 2018.09.15 hdu1599find the mincost route(floyd求最小环)
传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f ...
- 2018.09.15 bzoj1977:次小生成树 Tree(次小生成树+树剖)
传送门 一道比较综合的好题. 由于是求严格的次小生成树. 我们需要维护一条路径上的最小值和次小值. 其中最小值和次小值不能相同. 由于不喜欢倍增我选择了用树链剖分维护. 代码: #include< ...
- 2018.09.15 秘密的牛奶管道SECRET(次小生成树)
描述 约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线.一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式. 现在有W(3 <= W & ...
- 2018.09.15 vijos1053Easy sssp(最短路)
传送门 貌似可以最短路时同时判定负环啊. 但我不想这样做. 于是写了一个dfs版的判环,bfs版的求最短路. 代码: #include<iostream> #include<ccty ...
- 2018.09.15 poj2117Electricity(割点)
传送门 其实求一个图删除一个点之后,联通块最多有多少. 直接tarjan求割点更新答案就行了. 但注意原图不一定连通. 代码: #include<iostream> #include< ...
随机推荐
- ajax 实现跨域
ajax本身是不可以跨域的,通过产生一个script标签来实现跨域.因为script标签的src属性是没有跨域的限制的. 其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax ...
- 8 python time$datetime
1.表示时间的方式 (1)时间戳 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 我们运行“type(time.time())” ...
- c#之using关键字
1.using可以引入命名空间: 2.在using语句里声明的变量,使用完后会自动调用Dispose方法(实现IDisposable接口). using 语句允许程序员指定使用资源的对象应当何时释放资 ...
- webserive学习记录5-拦截器完成登陆校验
说说cxf中的拦截器,可以分为系统拦截器(如日志拦截器)和自定义拦截器,也可以分为出拦截器和入拦截器,也可以分为服务器拦截器和客户端拦截器. 下面将实现一个可以进行登陆验证的拦截器,其中用户名作为方法 ...
- fabric应用
安装: easy_install fabric 或 pip install fabric 验证: #python >>> import fabric 有时候我们可以直接使用命令行的 ...
- 显示Audio CD的音轨时间
uses MMSystem; procedure TForm1.Timer1Timer(Sender: TObject);var Trk : Word; Min : Word; Sec : ...
- Express 应用生成器
[Express 应用生成器] 通过应用生成器工具 express 可以快速创建一个应用的骨架. 通过如下命令安装,-g意味着安装在全局目录下: 下面的示例就是在当前工作目录下创建一个命名为 myap ...
- 二叉树的锯齿形层次遍历 · Binary Tree Zigzag Level Order Traversal
[抄题]: 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) [思维问题]: 不知道反复切换要怎么做:用boolean normalOrder当作布尔型 ...
- [leetcode]29. Divide Two Integers 两整数相除
Given two integers dividend and divisor, divide two integers without using multiplication, division ...
- CentOS下zabbix监控mysql5.6版本主从
目录 CentOS下zabbix监控mysql5.6版本主从 1. Zabbix添加自定义监控流程 2. 具体步骤 1. 编写监控mysql主从脚本 2. mysql赋权 3. 查看脚本执行效果 4. ...