码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【种类并查集】洛谷P1525 [NOIP2010 提高组] 关押罪犯


    P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

    题意:

    思路:

    要使冲突事件的影响力最小,这里可以用贪心,让影响力大的两个尽量分开即可

    那么这里可以把这么多关系按影响力从大到小排序,然后依次把已经连边的点拆开,直到发现矛盾了不能拆为止

    然后问题就变成:我们怎么去“拆”,即如何去维护两个事物的对立关系

    这里就要用到种类并查集了,又称扩展域并查集,用来维护两个事物的对立关系 

    我们先去按影响力排序,然后去遍历

    如果碰到的两个结点祖先不同,即自己指向自己或已经属于不同的监狱了,那么就用种类并查集把他们分开即可

    如果祖先相同,说明已经属于同一个监狱了,碰到了矛盾,那么停止“拆分”操作,止步于此,最大的边权就是改值

    Code:

    1. #include
    2. using namespace std;
    3. const int mxn=2e4+10,mxe=1e5+10;
    4. #define int long long
    5. int n,m;
    6. int f[mxn<<1];
    7. struct ty{
    8. int x,y,w;
    9. }a[mxe];
    10. bool cmp(ty x,ty y){
    11. return x.w>y.w;
    12. }
    13. int find(int x){
    14. return x==f[x]?x:(f[x]=find(f[x]));
    15. }
    16. void join(int u,int v){
    17. int f1=find(u),f2=find(v);
    18. if(f1!=f2) f[f1]=f2;
    19. }
    20. void init(){
    21. for(int i=0;i<=n<<1;i++) f[i]=i;
    22. }
    23. signed main(){
    24. scanf("%lld%lld",&n,&m);
    25. init();
    26. for(int i=1;i<=m;i++) scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].w);
    27. sort(a+1,a+1+m,cmp);
    28. for(int i=1;i<=m;i++){
    29. if(find(a[i].x)==find(a[i].y)){
    30. printf("%lld\n",a[i].w);
    31. return 0;
    32. }else{
    33. join(a[i].x,a[i].y+n);
    34. join(a[i].y,a[i].x+n);
    35. }
    36. }
    37. puts("0");
    38. return 0;
    39. }

    总结:

    思维:

    1.首先是贪心的思路,求最值就考虑贪心

    算法:

    参考:(123条消息) P1525 [NOIP2010 提高组] 关押罪犯_bell041030的博客-CSDN博客

    讲的非常好

    什么时候使用种类并查集:

    维护两样事物的对立关系的时候

    当出现“两个集合”这种字眼的时候,就可以考虑种类并查集了

    写法:

    1.初始化f数组,注意原域和扩展域都要初始化

    2.确定对立关系的写法:

    join(a,b+n)

    join(b,a+n)

  • 相关阅读:
    url相关知识点
    【2023全网最全教程】web自动化测试入门
    vector类的常用接口说明
    进程环境+进程终止
    Transformers基本组件(一)快速入门Pipeline、Tokenizer、Model
    卷积版wav to image 训练实例
    android studio 移植工程
    promise原理
    Linux-安装MySQL(详细教程)
    无人机红外相机的畸变矫正
  • 原文地址:https://blog.csdn.net/weixin_62528401/article/details/126590460
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号