CodeForces - 1131D-(Gourmet choice )(并查集+tarzan缩点+拓扑排序)(简单偏中等题)

题意:第一天有n道菜,第二天有m道菜,给出第一天每道菜跟第二天每道菜比较的结果,存在“=”,“<”,“>”三种结果,根据该结果对所有菜进行一个等级的划分,并要求菜的最大等级要尽量小。
题解:乍一看蛮像拓扑排序的,其实就是拓扑排序,只不过存在“=”这种比较结果,不过也很好处理,根据并查集将=的划分在同一个生成树里面,即利用tarzan缩点,最后跑一遍拓扑排序就好了。
hint:不知道为啥这个拓扑排序我用queue就WA用stack就AC,很奇怪。
附上ACcode:

#include <bits/stdc++.h>
#define FOPI freopen("INPUT.TXT", "r", stdin)
#define DOPI freopen("OUTPUT.TXT", "w", stdout)
#define FOR(i, x, y) for(int i = x; i <= y; i ++)
#define ROF(i, x, y) for(int i = x; i >= y; i --)
using namespace std;
typedef long long int ll;
const int ind=0x3f3f3f3f,N=1e3+10;
int f[N*N];
char ch[N][N];
int n,m;
int getf(int x){
   return f[x]==x?x:f[x]=getf(f[x]);}
vector<int> v[N*N];
int cnt[N*N];
int book[N*N];
int ans[N*N];
void dfs()
{
   
    stack<int> q;
    for(int i=1;i<=<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值