[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]+ ...
随机推荐
- html行内元素
定义 行内元素只占据它对应标签的边框所包含的空间,没有换行效果 div{ /* 定义行内元素*/ display:inline } 特点 多个元素可以横排显示 不支持宽高和上下margin 支持pad ...
- Java学习路线【转】
Java学习路线[转] 第一阶段:JavaSE(Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相 ...
- ElasticSearch IK热词自动热更新原理与Golang实现
热更新概述 ik分词器本身可以从配置文件加载扩张词库,也可以从远程HTTP服务器加载. 从本地加载,则需要重启ES生效,影响比较大.所以,一般我们都会把词库放在远程服务器上.这里主要有2种方式: 借助 ...
- 题解 「BZOJ4919 Lydsy1706月赛」大根堆
题目传送门 题目大意 给出一个 \(n\) 个点的树,每个点有权值,从中选出一些点,使得满足大根堆的性质.(即一个点的祖先节点如果选了那么该点的祖先节点的权值一定需要大于该点权值) 问能选出来的大根堆 ...
- 洛谷4299首都(LCT维护动态重心+子树信息)
这个题目很有意思 QWQ 根据题目描述,我们可以知道,首都就是所谓的树的重心,那么我们假设每颗树的重心都是\(root\)的话,对于每次询问,我们只需要\(findroot(x)\)就可以. 那么如何 ...
- Ajax样例
$.ajax({ url : "newsservlet",//请求地址 dataType : "json",//数据格式 type : "post&q ...
- Java(11)方法详细介绍
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201577.html 博客主页:https://www.cnblogs.com/testero ...
- 经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择
前言 本文介绍一篇CVPR2020的论文,它在paperswithcode上获得了16887星,谷歌学术上有261的引用次数. 论文主要介绍了目标检测现有的研究进展.anchor-based和 ...
- TCP/IP参考模型(应用层、传输层、网际层、网络接口层)、五层参考模型(应用层、传输层、网络层、数据链路层、物理层)、OSI与TCP/IP参考模型比较
文章转自:https://blog.csdn.net/weixin_43914604/article/details/104597450 学习课程:<2019王道考研计算机网络> 学习目的 ...
- TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution
Python Error when calling the metaclass bases Cannot create a consistent method resolution order (MR ...