题目链接:点击查看

题目大意:给出 m 个集合,每个集合中都有数个点,每个点的取值范围为 [ 1 , n ] ,对于每个集合而言,其中的点互相连边,边的颜色为其集合的编号,每次操作可以删除点,删除掉第 i 个集合中的点 j 的代价为 a[ i ] + b[ j ] ,现在规定 “彩虹环” 的定义为,一条环上的所有边的编号互不相同,现在问最少花费多少边权进行删点才能使得图中不存在 “彩虹环”

题目分析:模型的话很像之前训练的时候做过的一个最短路,也是好多个集合,每个集合中的点互相连边:HDU - 5521

于是不难想到对于每个集合而言,建立一个虚拟节点来表示此集合中的点两两可达,又因为题目中给出了删除掉每个节点的权值,所以虚拟节点与每个节点相连后的边权就是相应的 a[ i ] + b[ j ] 了

现在考虑转换最终的问题,也就是不存在 “彩虹环” 代表的到底是什么,因为经过了上一段的建模后,新的模型的特点是:

  1. 每个集合中的任意两点都是可达的
  2. 每个集合中不存在环

这样在新图中,如果存在环的话,那么一定是来自于不同集合的边所造成的贡献,所以我们只需要进行删边,使得新图中不存在环即可

因为要求删除的边权最小,换个角度就是剩下的树的权值尽可能大,这样题目就转换成了最大生成树的问题了

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;struct Edge
{int u,v;LL w;bool operator<(const Edge& t)const{return w>t.w;}
}edge[N];int cnt=0;LL a[N],b[N];int f[N<<1];int find(int x)
{return x==f[x]?x:f[x]=find(f[x]);
}bool merge(int x,int y)
{int xx=find(x),yy=find(y);if(xx!=yy){f[xx]=yy;return true;}return false;
}void init()
{for(int i=0;i<N<<1;i++)f[i]=i;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);init();int m,n;LL ans=0;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++)scanf("%lld",a+i);for(int i=1;i<=n;i++)scanf("%lld",b+i);for(int i=1;i<=m;i++){int num;scanf("%d",&num);while(num--){int x;scanf("%d",&x);cnt++;edge[cnt].u=i+n;edge[cnt].v=x;edge[cnt].w=a[i]+b[x];ans+=a[i]+b[x];}}sort(edge+1,edge+1+cnt);for(int i=1;i<=cnt;i++)if(merge(edge[i].u,edge[i].v))ans-=edge[i].w;printf("%lld\n",ans);return 0;
}

CodeForces - 1408E Avoid Rainbow Cycles(思维+最大生成树)相关推荐

  1. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  2. CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...

  3. Save your cats Aizu - 2224(思维+最大生成树)

    传送门 题意: 给出一个图,这个图形封闭区域(可能多个可能一个也没有),问最少需要破坏多少边使得封闭区域不封闭.先给出每个点的坐标,然后给出每条边的关系. 题解: 这个题因为封闭区域可能一个可能多个可 ...

  4. Codeforces 846 A Curriculum Vitae 思维 暴力

    题目链接: http://codeforces.com/contest/846/problem/A 题目描述: 给你一个串, 你可以做删除操作, 要求结果串0不能在1的右边, 问最多可以剩几个数字 解 ...

  5. Codeforces 861 B Which floor? 思维

    题目链接: http://codeforces.com/contest/861/problem/B 题目描述: 每个楼梯上有相同数量的数, 都是从1开始, 给你m个不矛盾的信息, 问你能不能判断n在第 ...

  6. CodeForces - 1494E A-Z Graph(构造+思维)

    题目链接:https://vjudge.net/problem/CodeForces-1494E 题目大意:给出一个初始时只有 nnn 个点的有向带权图,需要执行 mmm 次操作,每次操作分为下列三种 ...

  7. CodeForces - 1504C Balance the Bits(思维+构造)

    题目链接:https://vjudge.net/problem/CodeForces-1504C 题目大意:给出一个长度为 nnn 的 010101 串,现在要求构造出两个长度为 nnn 的合法括号序 ...

  8. CodeForces - 594A Warrior and Archer(思维+博弈)

    题目链接:点击查看 题目大意:给出n个坐标轴上的点,两个人轮流操作,每次取走其中的一个点,直到最后剩余两个点为止,Vova先手,Vova希望两个点的距离尽可能小,Lesha希望两个点的距离尽可能大,问 ...

  9. CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)

    ACM思维题训练集合 A new Berland businessman Vitaly is going to open a household appliances' store. All he's ...

最新文章

  1. nginx之location匹配规则
  2. windows系统下Python环境的搭建及Selenium的安装
  3. 一篇文章告诉你:荣耀10 GT为什么叫全能旗舰
  4. 【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )
  5. pearsonr() python_Python 来算算一线城市的二手房价格指数相关性
  6. 用php怎么输出饼状图,php绘图之生成饼状图的方法_PHP
  7. selenium 图片上传
  8. shell内部命令和外部命令
  9. 玩转 SpringBoot 2 快速整合 Filter 注解版
  10. win11wifi总掉线怎么办 windows11wifi总掉线的解决方法
  11. day 21 模块 和 包
  12. oracle在cmd中启动数据库实例
  13. The program ‘roscore‘ is currently not installed 解决办法
  14. [转] React之Immutable学习记录
  15. 制作NGUI动态字体
  16. 一步一步带你了解Hybrid开发框架之DsBridge
  17. 大厂对ChatGPT的开发利用和评估案例收录
  18. Asciinema终端SSH录屏神器使用
  19. Mysql的远程连接设置
  20. 阿里旗下,豆瓣等滑块验证码解决问题

热门文章

  1. Redis实现分布式Session管理
  2. MySQL 高级 - 触发器 - 创建及应用
  3. 并发的发展历史-集成电路和多道程序设计
  4. 消息发送到topic多个MessageQueue
  5. 字节流复制文本文件【应用】
  6. SpringMVC的请求-文件上传-单文件上传的代码实现1
  7. SpringMVC的请求-文件上传-客户端表单实现
  8. xml方式实现aop-切点表达式的抽取
  9. 常用IOC注解按照作用分类
  10. Stream流中的常用方法_limit