对于两条边$(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]括号路径的更多相关文章

  1. P7323-[WC2021]括号路径【并查集,启发式合并】

    正题 题目链接:https://www.luogu.com.cn/problem/P7323 题目大意 给出\(n\)个点的一张有向图.每个边\((u,v,w)\)表示\(u->v\)有一个类型 ...

  2. 洛谷 P7323 - [WC2021] 括号路径(启发式合并)

    题面传送门 emmmm----怎么评价这个题嘛...感觉纯论算法,此题根本谈不上难题,不过 WC 时候太智障只拿了个 48pts 就走人了.总之,技不如人,甘拜吓疯( 首先要注意到几件事情: 如果 \ ...

  3. vijos 1038 括号+路径 ***

    链接:点我 就是自己写不出来 #include <cstdio> #include <climits> #include <memory.h> using name ...

  4. 【Learning】插头DP

    简介 插头DP(轮廓线DP)是用来解决网格图回路问题的一种算法. 插头DP解决的经典问题就是统计经过所有格子的哈密顿回路条数,某些格子有障碍. ​ 如果问题稍微进阶一点的话,不一定要求路径是回路.路径 ...

  5. git clone出现Permission denied (publickey)解决办法

    一.错误 git clone git@gitee.com:wangzaiplus/xxx.git, 出现Permission denied (publickey) 二.原因 无权限, 未将公钥添加至G ...

  6. 前端学习笔记系列一:8 <noscript>…</noscript>,网站路径,vscode跳出右括号

    1.<noscript>…</noscript> 在body中使用此段代码,可识别 <script> 标签但无法支持其中的脚本的浏览器. 此段代码意思为如果浏览器不 ...

  7. 区间dp模型之括号匹配打印路径 poj(1141)

    题目链接:Brackets Sequence 题目描写叙述:给出一串由'(')'' [ ' ' ] '组成的串,让你输出加入最少括号之后使得括号匹配的串. 分析:是区间dp的经典模型括号匹配.解说:h ...

  8. 双引号与尖括号的区别 and 相对路径与绝对路径

    包含头文件的时候,如果包含的是自己写的头文件是用" " .如果是包含系统的头文件,一般用<>. 相对路径与绝对路径

  9. P2308 添加括号(dfs记录dp路径)

    传送门 \(一看肯定是区间DP(因为和和合并石子很相似,都要加n-1次)\) \(转移方程为(其中he[i][j]是i到j的和)\) \[dp[i][j]=min(dp[i][j],dp[i][k]+ ...

随机推荐

  1. 安全通信协议SSH应用与分析

    一.实验简介: 本次实验属于安全协议应用与分析系列 二 实验环境: Windows server 2003 server windows xp 做client 三.实验目的 通过该实验了解SSH服务器 ...

  2. 用 @Value("${xxxx}")注解从配置文件读取值的用法

    1.  用法: 从配置properties文件中读取init.password 的值. @Value("${init.password}") private String init ...

  3. Python技法3:匿名函数、回调函数和高阶函数

    1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数 ...

  4. pycharm环境下配置scrap爬虫环境

    [写在开头] 参考文章后面给出了备注信息,是在解决这个问题的时候,查找的比较有亮点的参考文章,如果本文章写的不太清楚的,可以去原文章进行查看.下面列举的四个文章有参考的成分也有验证的成分,解决办法重点 ...

  5. netty系列之:使用netty实现支持http2的服务器

    目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介 上一篇文章中,我们提到了如何在netty中配置TL ...

  6. Scrum Meeting 0427

    零.说明 日期:2021-4-27 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分登录,注 ...

  7. Spring Cloud Alibaba 使用Nacos作为服务注册中心

    为什么需要注册中心? 在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用:服务管理,核心是有个服务注册表,心跳机制动态维护 : 服务注册 创建普通Spring ...

  8. 如何清理history

    工作中,需要清理history 清理当前会话历史命令    history -c 清理当前用户所有历史命令     echo > .bash_history     #在用户主目录执行此操作

  9. gas-station leetcode C++

    There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...

  10. clone-graph leetcode C++

    Clone an undirected graph. Each node in the graph contains alabeland a list of itsneighbors. OJ's un ...