题解 CF650C 【Table Compression】

题解 - C F 650 C \mathrm{CF650C} CF650C

题目意思

S o l \mathrm{Sol} Sol

  • 并查集+拓扑

  • 首先我们考虑关系图很能想到拓扑排序对吧!然后我们可以把一行中权值相同的点合成一个联通块。

  • 于是就重新建图(及不同联通块之间连边)

  • 还有我们不好找起点于是就随意定个虚点以其为起点跑有向图上的最长路即可。

  • 时间复杂度: O ( n × m log ⁡ ( n × m ) ) O(n\times m \log (n\times m)) O(n×mlog(n×m))

C o d e \mathrm{Code} Code

#include <bits/stdc++.h>
#define For(i,a,b) for ( int i=(a);i<=(b);i++ )
#define Dow(i,b,a) for ( int i=(b);i>=(a);i-- )
#define GO(i,x) for ( int i=head[x];i;i=e[i].nex )
#define mem(x,s) memset(x,s,sizeof(x))
#define cpy(x,s) memcpy(x,s,sizeof(x))
#define YES return puts("YES"),0
#define NO return puts("NO"),0
#define GG return puts("-1"),0
#define pb push_back
#define lowbit(x) x&(-x)
using namespace std;

inline int read()
{
   
	int sum=0,ff=1; char ch=getchar();
	while(!isdigit(ch))
	{
   <
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值