[abc302f] Merge Set
F - Merge Set
显然要建图
首先,我们有一个粗略的想法,对于同一集合\(S_i\)内的元素,\(S_{i,j}\)与\(S_{i,j+1}\)间连一条无向的标号为\(i\)的边
那么题目显然是要我们跑最短路,若到达\(x\)的边为\(i\),然后从\(x\)向外走到点\(y\),走的边若还为\(i\),那么代价为\(0\),否则代价为\(1\)
也就是说,换边走需要\(1\)的贡献
所以考虑用集合\(S_i\)连向所有的\(S_{i,j}\),因为不换边代价为\(0\),所以\(S_i\rightarrow S_{i,j}\)的权值为\(0\),而换边走代价为\(1\),也就意味着若当前边的类型为\(S_i\),且当前点为\(S_{i,p}\),那么我们要换另一种类型的边走,也就是要从\(S_{i,p}\)走到\(S_j\)(\(S_{i,j}\in S_j\)),这时需要\(1\)的代价,所以\(S_{i,j}\rightarrow S_i\)的权值为\(1\)
那么只需要建立一个起点\(S\)连向所有包含了1的集合,终点\(T\)就是M,\(S\)到\(T\)的最短路就是所求的答案
#include<bits/stdc++.h>
using namespace std;
const int N=4e5+5,M=5e5+5,INF=1e9;
int n,m,S,T;
int dis[N];
bool vis[N];
int head[N],cnt=1;
struct node{
int nxt,v,val;
}tree[(M<<1)+(N>>1)];
void add(int u,int v,int val){
tree[++cnt]={head[u],v,val},head[u]=cnt;
}
queue<int> q;
void solve(){
for(int i=1;i<=T;++i) dis[i]=INF;
q.push(S);
while(q.size()){
int u=q.front(); vis[u]=false,q.pop();
for(int i=head[u],v;i;i=tree[i].nxt)
if(dis[v=tree[i].v]>dis[u]+tree[i].val){
dis[v]=dis[u]+tree[i].val;
if(!vis[v]) q.push(v),vis[v]=true;
}
}
}
int main(){
scanf("%d%d",&n,&m),S=n+m+1,T=n+m;
for(int i=1,a,x;i<=n;++i){
scanf("%d",&a);
while(a--){
scanf("%d",&x),add(i,x+n,0),add(x+n,i,1);
if(x==1) add(S,i,0);
}
}
solve();
if(dis[T]==INF) printf("-1\n");
else printf("%d\n",dis[T]);
return 0;
}
[abc302f] Merge Set的更多相关文章
- [算法]——归并排序(Merge Sort)
归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...
- SQL 提示介绍 hash/merge/concat union
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...
- Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join
nested loops join(嵌套循环) 驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...
- Git 少用 Pull 多用 Fetch 和 Merge
本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...
- Merge 的小技巧
今天跟大家分享一下搬动数据使用Merge的方法. 有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系.比如我现在有架构相同的两组table , A ...
- [LeetCode] Merge Sorted Array 混合插入有序数组
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...
- [LeetCode] Merge Intervals 合并区间
Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...
- [LeetCode] Merge Two Sorted Lists 混合插入有序链表
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
随机推荐
- APEX实战第2篇:构建自己第一个APEX程序
为了尽快实现从0到1的突破,第一个程序就选择一个最简单易懂的生活场景. 后续随着APEX学习过程不断迭代增强这个程序. 现在就开始吧,我给孩子看一些公开网络课时,习惯把课程资源做分片,然后有计划的让孩 ...
- 【Linux】5.5 Shell运算符
Shell运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现 ...
- 《机器人SLAM导航核心技术与实战》第1季:第0章_SLAM发展综述
<机器人SLAM导航核心技术与实战>第1季:第0章_SLAM发展综述 视频讲解 [第1季]0.第0章_SLAM发展综述-视频讲解 [第1季]0.1.第0章_SLAM发展综述-梳理定位导航技 ...
- 探秘Transformer系列之(26)--- KV Cache优化---分离or合并
探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并 目录 探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并 0x00 ...
- 为什么 Java 中 CMS 垃圾收集器在发生 Concurrent Mode Failure 时的 Full GC 是单线程的?
为什么 Java 中 CMS 垃圾收集器在发生 Concurrent Mode Failure 时的 Full GC 是单线程的? 在 CMS(Concurrent Mark-Sweep)垃圾收集器中 ...
- hadoop部署安装(三)zookeeper+yarn
1. 配置zookeeper 3.1 解压存放指定目录 [root@bogon src]# tar xf zookeeper-3.4.10.tar.gz [root@bogon src]# mv zo ...
- 解决 podman 容器无法在宿主机和容器内部相互访问问题的记录
解决 podman 容器无法在宿主机和容器内部相互访问问题的记录 近期在使用 podman 时,遇到了容器无法在宿主机和容器内部相互访问的问题.经过一番探索,参考了这篇文章,成功解决了该问题.在此,我 ...
- K8s新手系列之Pod中容器的镜像拉取策略
概述 在 Kubernetes(K8s)里,容器镜像拉取策略(ImagePullPolicy)决定了 K8s 在创建或重启 Pod 时,如何处理容器镜像的拉取操作.这一策略能够确保使用的镜像始终是最新 ...
- maven配置jdk版本
修改默认的jdk版本 在maven安装目录 apache-maven-3.6.1\conf\setting.xml 添加 <profile> <id>jdk18</id& ...
- 【工具】JS脚本|网页任意视频倍速播放(包括MOOC、本地视频、其他的视频)
实际发布时间:2022-12-14 22:54:52. csdn禁止浏览器脚本相关博客了,就只能重新发到这儿了. 2024/12/14更新:更新了常见问题Q&A,可以配合食用. 只要浏览器 ...