[loj3462]括号路径
对于两条边$(x_{1},y,c)$和$(x_{2},y,c)$,不难发现$x_{1}$与$x_{2}$完全等价,因此可以合并
重复此过程,合并之后用启发式合并来合并边集(注意自环也可以参与合并,即$(x,y,c)$和$(y,y,c)$,那么就将$x$和$y$合并),并用一个队列来记录操作
之后,当不存在此类边,考虑一条合法路径中必然有相邻两次,选择了同类型的左右括号(先左后右),由于不存在此类边,不难证明这只能在一条边上往返,显然无意义,即只能在合并后的集合内部选,并查集维护即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 300005
4 struct ji{
5 int x,c,y;
6 };
7 queue<ji>q;
8 map<int,int>mat[N];
9 map<int,int>::iterator it;
10 int n,m,k,x,y,z,f[N],sz[N];
11 long long ans;
12 int find(int k){
13 if (k==f[k])return k;
14 return f[k]=find(f[k]);
15 }
16 void merge(int x,int y){
17 x=find(x),y=find(y);
18 if (x==y)return;
19 if (mat[x].size()<mat[y].size())swap(x,y);
20 f[y]=x;
21 sz[x]+=sz[y];
22 for(it=mat[y].begin();it!=mat[y].end();it++)
23 q.push(ji{x,(*it).first,(*it).second});
24 }
25 int main(){
26 scanf("%d%d%d",&n,&m,&k);
27 for(int i=1;i<=n;i++){
28 f[i]=i;
29 sz[i]=1;
30 }
31 for(int i=1;i<=m;i++){
32 scanf("%d%d%d",&x,&y,&z);
33 q.push(ji{y,z,x});
34 }
35 while (!q.empty()){
36 ji o=q.front();
37 q.pop();
38 o.x=find(o.x);
39 if (!mat[o.x][o.c])mat[o.x][o.c]=o.y;
40 else merge(mat[o.x][o.c],o.y);
41 }
42 for(int i=1;i<=n;i++)
43 if (f[i]==i)ans+=1LL*sz[i]*(sz[i]-1)/2;
44 printf("%lld",ans);
45 }
[loj3462]括号路径的更多相关文章
- P7323-[WC2021]括号路径【并查集,启发式合并】
正题 题目链接:https://www.luogu.com.cn/problem/P7323 题目大意 给出\(n\)个点的一张有向图.每个边\((u,v,w)\)表示\(u->v\)有一个类型 ...
- 洛谷 P7323 - [WC2021] 括号路径(启发式合并)
题面传送门 emmmm----怎么评价这个题嘛...感觉纯论算法,此题根本谈不上难题,不过 WC 时候太智障只拿了个 48pts 就走人了.总之,技不如人,甘拜吓疯( 首先要注意到几件事情: 如果 \ ...
- vijos 1038 括号+路径 ***
链接:点我 就是自己写不出来 #include <cstdio> #include <climits> #include <memory.h> using name ...
- 【Learning】插头DP
简介 插头DP(轮廓线DP)是用来解决网格图回路问题的一种算法. 插头DP解决的经典问题就是统计经过所有格子的哈密顿回路条数,某些格子有障碍. 如果问题稍微进阶一点的话,不一定要求路径是回路.路径 ...
- git clone出现Permission denied (publickey)解决办法
一.错误 git clone git@gitee.com:wangzaiplus/xxx.git, 出现Permission denied (publickey) 二.原因 无权限, 未将公钥添加至G ...
- 前端学习笔记系列一:8 <noscript>…</noscript>,网站路径,vscode跳出右括号
1.<noscript>…</noscript> 在body中使用此段代码,可识别 <script> 标签但无法支持其中的脚本的浏览器. 此段代码意思为如果浏览器不 ...
- 区间dp模型之括号匹配打印路径 poj(1141)
题目链接:Brackets Sequence 题目描写叙述:给出一串由'(')'' [ ' ' ] '组成的串,让你输出加入最少括号之后使得括号匹配的串. 分析:是区间dp的经典模型括号匹配.解说:h ...
- 双引号与尖括号的区别 and 相对路径与绝对路径
包含头文件的时候,如果包含的是自己写的头文件是用" " .如果是包含系统的头文件,一般用<>. 相对路径与绝对路径
- P2308 添加括号(dfs记录dp路径)
传送门 \(一看肯定是区间DP(因为和和合并石子很相似,都要加n-1次)\) \(转移方程为(其中he[i][j]是i到j的和)\) \[dp[i][j]=min(dp[i][j],dp[i][k]+ ...
随机推荐
- Python Pandas的使用 !!!!!详解
Pandas是一个基于python中Numpy模块的一个模块 Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些.pandas帮助填补了这⼀空⽩,使您能够在Python中执 ...
- hmac和socketserver
一,hmac 验证客户端的合法性 hmac,检测客户端是否合法,不依赖登录认证 server import os,socket,hmac sk=socket.socket() sk.bind(('12 ...
- 题解 Yuno loves sqrt technology II
题目传送门 题目大意 有\(n\)个数,\(m\)个查询,每次查询一个区间内的逆序对个数. \(n,m\le 10^5\) 思路 其实是为了锻炼二次离线才做这道题的. 不难想到可以有一个\(\Thet ...
- CF280C Game on tree(期望dp)
这道题算是真正意义上人生第一道期望的题? 题目大意: 给定一个n个点的,以1号点为根的树,每一次可以将一个点和它的子树全部染黑,求染黑所有点的期望 QwQ说实话,我对期望这种东西,一点也不理解... ...
- python中的load、loads实现反序列化
load与loads 简介: 在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型. 这样在我们传递参数的时候就会出现格式不 ...
- 这部分布式事务开山之作,凭啥第一天预售就拿下当当新书榜No.1?
大家好,我是冰河~~ 今天,咱们就暂时不聊[精通高并发系列]了,今天插播一下分布式事务,为啥?因为冰河联合猫大人共同创作的分布式事务领域的开山之作--<深入理解分布式事务:原理与实战>一书 ...
- 【UE4 插件】UnrealEnginePython 源码版编译、项目打包注意事项
源码下载 git clone git clone https://github.com/20tab/UnrealEnginePython 直接下载zip https://github.com/20ta ...
- 对mongo文档的增删改操作
在mongo db 中增加.删除.修改文档有好多方法,这里简单记录一下我所知道的一些方法. 前置条件: 1.创建study数据库 use study; 2.创建persons集合,当第一次向pers ...
- 算法:N-皇后问题
一.八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在8 × 8 的国际象棋棋盘上放置八个皇后(Queen),使得任何一个皇后都无法直接吃掉其他的皇后.为了达到此目的,任两个皇后都不能处于 ...
- Shadertoy 教程 Part 2 - 圆和动画
Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...