Codeforces 1166 F. Vicky's Delivery Service 并查集+set
题意:有n个点,m条边,边有c种颜色,q次操作。
每个边都有一种颜色。
然后操作有两种,一种是再加一条边,另一种是查询能否从x达到y。
移动的限制是,连着走两步必须是同一种颜色,如果走奇数步,最后一步可以是任意颜色。
例子:1-2-3-4-5-6。
这个题颜色种类很多,我是用map<int,vector<int>>来存边。
我们首先可以想到 对于点x同种颜色连着的点都是可以相互移动的,所以我们可以用这种方法将它们用并查集合并,我们也可以直接map<int,int>来存边,因为一个vector里的点是等价的。
但是这样有一个问题,走偶数步可以走通的已经被我们合并可以直接查询了,那么最后一步能走到的怎么办呢?
我们可以对每个联通集合存一个set,里面放集合中能一步走到的点。我们之后要合并集合,这个set自然也要合并,本来是想着用可并堆,但是其实用启发式合并也可以了。
以下为代码:
#include<bits/stdc++.h>
using namespace std;
int i,i0,n,m,c,q,pre[100005];
map<int,vector<int>>mp[100005];
set<int>dic[100005];
int fin(int x){return (pre[x]==x)?x:pre[x]=fin(pre[x]);}
void uni(int x,int y)
{if(fin(x)!=fin(y)){if(dic[fin(x)].size()<dic[fin(y)].size())swap(x,y);for(auto i:dic[fin(y)])dic[fin(x)].insert(i),pre[fin(y)]=fin(x);}
}
void add()
{int x,y,col;scanf("%d %d %d",&x,&y,&col);dic[fin(x)].insert(y),dic[fin(y)].insert(x);mp[x][col].push_back(y),uni(y,mp[x][col][0]);mp[y][col].push_back(x),uni(x,mp[y][col][0]);
}
int main()
{scanf("%d %d %d %d",&n,&m,&c,&q);for(i=1;i<=n;i++)pre[i]=i;while(m--)add();while(q--){char op;scanf(" %c",&op);if(op=='?'){int x,y;scanf("%d %d",&x,&y);printf("%s\n",(fin(x)==fin(y)||dic[fin(x)].count(y))?"Yes":"No");}else add();}return 0;
}
转载于:https://www.cnblogs.com/megalovania/p/10896862.html
Codeforces 1166 F. Vicky's Delivery Service 并查集+set相关推荐
- codeforces#1166F. Vicky's Delivery (Service并查集+启发式合并)
题目链接: https://codeforces.com/contest/1166/problem/F 题意: 给出节点数为$n$,边数为$m$的图,保证每个点对都是互连的 定义彩虹路:这条路经过$k ...
- Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集
传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau+av≥x ...
- CodeForces - 1463E Plan of Lectures(拓扑排序+并查集缩点)
题目链接:点击查看 题目大意:给出一棵有根树,树边都是有向边,再给出 kkk 个关系 (x,y)( x , y )(x,y),其意义是访问完点 xxx 后需要立即访问点 yyy,问是否存在一种合适的拓 ...
- codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
F. Number of Components 并查集,每次修改考虑的是这个修改带来的贡献,就是和相邻颜色的对比,如果不考虑先不考虑颜色覆盖,那么添加颜色首先会产生一个新的连通块,然后考虑合并,每合并 ...
- 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)
题干: Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn ...
- 【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)
题干: 小O无意间发现了一张藏宝图,它跟随藏宝图的指引来到了一个宫殿,宫殿的地板被分成了n*m块格子,每个格子上放置了金子或者石头 藏宝图告诉小O,它可以选择一块石头变成金子,并且带走与变化后的金子联 ...
- Codeforces Contest 1081 problem D Maximum Distance —— 并查集
Chouti was tired of the tedious homework, so he opened up an old programming problem he created year ...
- 暑期集训5:并查集 线段树 练习题F: HDU - 1166
2018学校暑期集训第五天--并查集 线段树 练习题F -- HDU - 1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...
- CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)
CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换) 首先一共有四个操作,第一个和第四个都是线段树的基本操作,直接用线段树实现. 第 ...
最新文章
- mysql监控内存cpu使用率_监控 cpu 内存 网卡的使用情况的一个命令 比较实用
- lombok使用中出现继承关系的对象时,出现的问题及解决办法
- android PendingIntent参数详细解析
- 剑指offer(34-40题)详解
- MySQL创建数据库与创建用户以及授权
- 台式机dp接口_2K至4K显示器性价比线材选购攻略,毕亚兹 DP高清线入手
- mysql 修改字符集为utf8mb4
- linux压缩文件夹
- shell习题第26题:监控mysql服务
- 64位计算机安装xp,Windows XP(64位)如何安装语言包
- BXP多分区的正确的操作步骤(转)
- 关于黑马JavaWeb教程注册登录案例报错
- [bzoj 4939][Ynoi 2016]掉进兔子洞
- win7计算机无法远程桌面连接,解决win7无法被远程桌面连接教程
- win的反义词_单词还死记硬背?反义词法让孩子轻松记单词!
- GNSS文件下载网址
- db2import详解_DB2中import详解 - yishueitian326的日志 - 网易博客
- 新一代SSD接口来了 | M.2接口发福版?
- TensorFlow简单实例(二):logistic regression
- Android sqlite数据库的使用(增删改查)