首页 > 其他分享 >luogu P7323 [WC2021] 括号路径

luogu P7323 [WC2021] 括号路径

时间:2023-01-17 08:22:05浏览次数:61  
标签:fa int luogu ll db WC2021 P7323 using define

题面传送门

为了方便,我们仅保留\((v,u,-w)\)的反向边。

可以发现,如果某个点\(u\)到\(v_1,v_2\)同时有相同边权的边,那么\((v_1,v_2)\)就是一个合法的点对。因此可以这样暴力扩展,用bitset优化,能过\(64\)分。

这个方法的问题在于没有用到双向边的性质。具体的,我们发现,如果\((u,v_1)\)是可达的,\((u,v_2)\)是可达的,那么\((v_1,v_2)\)也是可达的,因为路径双向。

则可以用并查集维护这个东西,然后对于每个联通块,统计连到外面的边。这里发现每种颜色的边只需要保留一条,因为之前已经都合并过了。所以用个能合并的东西维护就好了。

因为275307894a很懒,所以写了个启发式合并map,复杂度两个\(\log\),如果写线段树合并可以做到一个\(\log\)。

code:

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n))
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned ll;
using namespace std;const int N=3e5+5,M=5e5+5,K=1e5+5,mod=998244353,Mod=mod-1,INF=2e9+7;const db eps=1e-7;mt19937 rnd(263082);
int n,m,k,x,y,z,fa[N],Si[N];ll Ans;unordered_map<int,int> f[N];
int GF(int x){return fa[x]^x?fa[x]=GF(fa[x]):x;}queue<pair<int,int>> Q;
#define fi first
#define se second
void Ins(int x,int y,int w){
	if(!f[x].count(w)) f[x][w]=y;
	else Q.push({y,f[x][w]});
}
int main(){
	int i,j;scanf("%d%d%d",&n,&m,&k);for(i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),Ins(y,x,z);for(i=1;i<=n;i++) fa[i]=i;
	while(!Q.empty()){
		auto p=Q.front();Q.pop();if(GF(p.fi)==GF(p.se)) continue;
		int x=GF(p.fi),y=GF(p.se);f[x].size()<f[y].size()&&(swap(x,y),0);
		for(auto j:f[y]) Ins(x,j.se,j.fi);fa[y]=x;
	}
	for(i=1;i<=n;i++) Si[GF(i)]++;for(i=1;i<=n;i++) Ans+=1ll*Si[i]*(Si[i]-1)/2;printf("%lld\n",Ans);
}

标签:fa,int,luogu,ll,db,WC2021,P7323,using,define
From: https://www.cnblogs.com/275307894a/p/17056905.html

相关文章

  • Luogu P4793 [AHOI2008] 矩形藏宝地
    链接难度:\(\texttt{省选/NOI-}\)有\(n\)个矩形,左下角为\((x1,y1)\),右上角为\((x2,y2)\),问被其他的矩形包含的矩形有多少个。数据范围:\(1\len\le200000,x1<x2,y1<y......
  • Luogu P4013 数字梯形问题
    说实话这道题挺乐的,去年11月学网络流时碰到这道题,一直没想通,结果碰到考试月,被遣返回家,一个多月没摸了,今天看到这道题一下子想通了,于是想记下来。题目传送门P4013数字梯......
  • Luogu7509 撕裂消除 - 期望dp -
    题目链接:https://www.luogu.com.cn/problem/P7509题解:设\(dp[i][j][0/1]\)表示考虑到第\(i\)个位置,已经形成了极大的\(j\)段,当前位置为0/1的期望值;\(g[i][j][0......
  • 【luogu CF1707D】Partial Virtual Trees(容斥)(DP)
    PartialVirtualTrees题目链接:luoguCF1707D题目大意给你一棵以1为根的数,问你对于每个长度,有多少个点集序列,第一个点集是全部点,最后一个点集只有1号点,且中间每个点......
  • luogu P3518 [POI2011]SEJ-Strongbox | loj #2160. 「POI2011 R2 Day0」保险箱 Strong
    代码已在loj上不开O2通过。下文均在\(Z_n\)下考虑。首先,你考虑选出一些数,能组成的数。即ttps://www.cnblogs.com/xugangfan/p/17040634.html那么对于一个不在群......
  • Luogu P5465 [PKUSC2018] 星际穿越
    观察可以发现一个结论,可以视作每个点\(i\)可以一步到达\(l_i\simn\)的每一个点。发现对于\(a<b<x\),\(dist(a,x)\gedist(b,x)\)第一步是相当特殊的,因为第一步......
  • luogu P5291 [十二省联考 2019] 希望
    题面传送门真的很想吐。题目的意思大概就是在一棵树上选出\(k\)个联通块,使得这\(k\)个联通块有交。显然联通块的交还是联通块,因此转化为对联通块计数。而联通块个数等于......
  • [luogu]P2123 皇后游戏
    题目传送门分析和国王游戏一样的思路直接考虑邻项交换观察易知排在后面的大臣获得的奖赏一定更多假设前\(i-1\)位左手上的数和为\(a\),第\(i-1\)位获得奖赏为\(......
  • luogu P1971 [NOI2011] 兔兔与蛋蛋游戏
    题面传送门没想到二分图博弈这么早就考了?首先我们发现,如果将和起点行列之和奇偶性一样的点设为黑色,其余设为白色,那么每次空格只会在异色边之间走,而不会在同色边之间走。......
  • Luogu P4592 [TJOI2018]异或 做题记录
    随机跳的。树上维护序列,显然树剖。维护异或,显然01trie。01trie维护区间异或,显然可持久化一下。看到时限很大,显然可以双log。于是跑一边树剖,再根据id暴力建一个可......