题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935

有向图用最小的路径(==总点数最少)覆盖所有边。

完了完了我居然连1999年的题都做不出来了。

TJ:https://blog.csdn.net/u014609452/article/details/53705451

仔细一想,原来就是欧拉回路的连通块自然不用说,原来不是欧拉回路的连通块,我们在走路径的时候不时从一个点跳到另一个点,其实可以看作是给这两个点间连了一条边!

所以手动连一个欧拉回路。这样应该一定是最小的。

因为是欧拉回路,所以有点浪费。因为其实欧拉路就可以了,只是我们不会连成欧拉路罢了。

考虑把自己连的一条边当做路径的开始或结尾,这样就可以不走那条边,从而变成欧拉路。体现在答案上就是少了一个点,点数==删边前边数。

TJ的代码实现这一过程写得太好啦!无耻默写。

所以需要回顾!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,sum,deg[N+],fa[N+],ans;
bool tag[N+],vis[N+];
int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}
int main()
{
for(int i=;i<=N;i++)fa[i]=i;
scanf("%d",&n);int x,y;ans=n;//原边数
for(int i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
vis[x]=;vis[y]=;
deg[x]++;deg[y]--;
if(find(x)!=find(y))fa[find(x)]=find(y);
}
for(int i=;i<=N;i++)
if(vis[i]&&deg[i])tag[find(i)]=;
for(int i=;i<=N;i++)
if(vis[i]&&fa[i]==i&&!tag[i])ans++;//原欧拉回路+1
for(int i=;i<=N;i++)
sum+=(deg[i]>?deg[i]:-deg[i]);//补的边
ans+=sum/;
printf("%d",ans);
return ;
}

bzoj 2935 [Poi1999]原始生物——欧拉回路思路!的更多相关文章

  1. 【刷题】BZOJ 2935 [Poi1999]原始生物

    Description 原始生物的遗传密码是一个自然数的序列K=(a1,...,an).原始生物的特征是指在遗传密码中连续出现的数对(l,r),即存在自然数i使得l=ai且r=ai+1.在原始生物的遗 ...

  2. bzoj2935 [Poi1999]原始生物——欧拉回路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 考察欧拉回路性质的题目呢: TJ:https://blog.csdn.net/u014 ...

  3. BZOJ2935: [Poi1999]原始生物(欧拉回路)

    2935: [Poi1999]原始生物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 150  Solved: 71[Submit][Status][D ...

  4. BZOJ 2935/ Poi 1999 原始生物

    [bzoj2935][Poi1999]原始生物   2935: [Poi1999]原始生物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 145  So ...

  5. 【bzoj2935】[Poi1999]原始生物

    2935: [Poi1999]原始生物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 145  Solved: 71[Submit][Status][D ...

  6. BZOJ 2933([Poi1999]地图-区间Dp)

    2933: [Poi1999]地图 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 7   Solved: 7 [ Submit][ Status] ...

  7. BZOJ.5288.[AHOI/HNOI2018]游戏(思路 拓扑)

    BZOJ LOJ 洛谷 考虑如何预处理每个点能到的区间\([l,r]\). 对于\(i,i+1\)的一扇门,如果钥匙在\(i\)的右边,连边\(i\to i+1\),表示从\(i\)出发到不了\(i+ ...

  8. BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)

    BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...

  9. BZOJ.4052.[Cerc2013]Magical GCD(思路)

    BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...

随机推荐

  1. vue swiper异步加载轮播图,并且懒加载

    参考:https://blog.csdn.net/weixin_38304202/article/details/78282826 效果: 此处安装省略 vue: <div class=&quo ...

  2. easyui combotree的使用示例

    一.View: 1.定义输入控件 <input id="ParentId" name="ParentId"> 2.绑定combotree $('#P ...

  3. LINQ用法总结

    之前一直用sql和拉姆达表达式,一直感觉linq不好用.用熟练了感觉期功能好强大,查询性能例外考究.这里讲讲基本用法. 内联查询: var list2 = (from a in db.Role whe ...

  4. Easy Excel导出

    @GetMapping(value = "/down2") public void down2(HttpServletResponse response) throws Excep ...

  5. 拦截器和自定义注解@interface

    1 .拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在Handler执行之前或之后加入某些操作,其实就是AOP的一种实现策略. 拦截用户的请求并进行相应的处理,比如:判断用 ...

  6. 淼一淼A+B problem

    鲁迅:这可是道难题呢! 鲁迅:我没说过这话,不过确实在理. 某改题毕,但见LOJ之上有数「A+B」之AC记录.余亦尝闻A+B之趣味无穷,遂兴起而码之. 少顷,AC之,吾心所畅. #include< ...

  7. UITableViewCell delete button 上有其它覆盖层

    第一种解决办法: // Fix for iOS7, when backgroundView comes above "delete" button - (void)willTran ...

  8. 不同浏览器Cookie有效期问题

    昨天项目迁移了测试服务器,之后奇怪的问题出现了. IE.谷歌无法登陆,火狐可以登陆. 这个项目先后部署过两个测试服务器.一台正式服务器,登陆都是正常的,这次却突然出现这种奇怪的问题,很是纠结. 通过查 ...

  9. LintCode_389 判断数独是否合法

    题目 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说明 什么是 数独? ...

  10. 反编译之dex2jar工具

    1.下载地址https://sourceforge.net/projects/dex2jar/files/?source=navbar bat是Windows系统使用,sh是mac系统使用!