首页 > 其他分享 >相对次序建有向图——cf_925_F. Chat Screenshots

相对次序建有向图——cf_925_F. Chat Screenshots

时间:2024-02-14 23:12:10浏览次数:38  
标签:pre 有向图 const int cf long Chat now define

目录

问题概述

原题参考:F. Chat Screenshots
聊天室内有n个人,存在一定的顺序,但是每个人看顺序时都会把自己放到最前面,其余人的位置不变,现在给出k组长度为n的排列,问是否冲突

思路分析

对于k组排列,除了自己的位置未知外,其余人的相对次序都是正确的,将其看作有向边,如果出现矛盾,则会成环,因此对于该问题,就是将k组排列的相关边建图,然后求拓扑排序

参考代码

#include <bits/stdc++.h>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<int>
#define vl vector<long long>
#define ll long long
#define ull unsigned long long
const ll INF = 9187201950435737471;
const int inf = 2139062143;
const ll mod = 1e9 + 7;
const double eps = 1e-6;
const double PI = acos(-1.0);
const int N = 2e5+7;
vi e[N];
int n, m, dIn[N], mq[N];
void topoSort() {
    int front = 1, rear = 0;
    for(int i=1; i<=n; i++) {
        if(!dIn[i]) mq[++rear] = i;
    }
    while(front <= rear) {
        int cur = mq[front++];
        for(auto nxt:e[cur]) {
            if(!(--dIn[nxt])) mq[++rear] = nxt;
        }
    }
    if(front == n+1) cout << "YES" << endl;
    else cout << "NO" << endl;
}
void solve() {
    cin >> n >> m;
    while(m --) {
        int pre = 0, now;
        for(int i=1; i<=n; i++) {
            cin >> now;
            if(i == 1) continue;
            if(!pre) pre = now;
            else {
                e[now].push_back(pre);
                dIn[pre]++;
                pre = now;
            }
        }
    }
    topoSort();
    for(int i=1; i<=n; i++) dIn[i] = 0, e[i].clear();
}
int main() {
#ifdef xrl
    freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
#endif
    FAST_IO;
    int t = 1;
    cin >> t;
    while(t --) solve();
#ifdef xrl
    cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
#endif
    return 0;
}

做题反思

都没想到这一茬,甚至还想着模拟来着

标签:pre,有向图,const,int,cf,long,Chat,now,define
From: https://www.cnblogs.com/notalking569/p/18015820

相关文章

  • 数组元素关系映射——cf_925_D. Divisible Pairs
    目录问题概述思路分析参考代码做题反思问题概述原题参考:D.DivisiblePairs给出整数n、x、y和长度为n的数组,要求求出数组中满足以下关系的数对x|ai+ajy|ai-aji<j思路分析刚开始看到这个题的时候觉得没思路,坐牢卡半天发现感觉是对的(裂开)。题解给的是map的做法,看完之......
  • 2024.2.14 WC24 线段树 / CF1572D / lgP3679
    西安Day1。感冒还没好,牙龈炎也没好,明天还要考试,又要坐牢了/kk。今天是tyy的图论选讲,感觉前面网络流部分还是在线的,平面图部分毒瘤tyy拿出了他的员交课件,恐怖,直接下线了。看了NAVI和Faze的预选赛,你们俩怎么都打的这么稀碎/fn。Override真好听。「WC2024」线段树我......
  • CF925
    CF925补题ing待更新F对第2到n依次建边,求拓扑序是否存在,即cnt=n#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#defineintlonglong#definedb(x)cout<<x<<""<<endl;#define_db(a,n)for(inti=1;i<=n;i++)c......
  • CF1931F Chat Screenshots 另一种题解
    题目链接:CF或者洛谷本题拓扑排序不再赘述,来说说字符串哈希怎么做这题。本篇以另一种角度剖析题目背景,并不追求最优,例如有些地方其实可以暴力判断,主要以构造的角度阐述,顺便感谢灵茶山的朋友的讨论。结论三个串及其以上必定能构造出最初的那个串。下面进行证明:首先一个串,显......
  • CF609D题解
    Gadgetsfordollarsandpounds题目传送门题解给一个单\(\log\)题解。“求最早完成买\(k\)样东西的天数。”——很明显的二分答案。在检验函数中,我们应当把前\(k\)小的物品费用之和与总金额作比较,其它题解大多使用直接排序的方法,于是就多了一只\(\log\)。其实没有必......
  • CF1927G Paint Charges
    题意简述你有\(n\)个道具,对于第\(i\)个道具,你可以选择覆盖\([i-a_i+1,i]\)或\([i,i+a_i-1]\),或者什么都不做。求覆盖所有\(1\simn\)所需要的道具的最小数目。\(n\le100\)。\(O(n^3)\)解法首先明确一个事实:被一个或多个区间包含的区间,使用该区间对应的道具是没有......
  • CF1928E Modular Sequence
    原题链接设\(p=x\bmody\)。思考发现本质是\(x,x+y,x+2y,\cdots,x+k_1y,p,p+y,p+2y,\cdots,p+k_2y,p,p+y,p+2y,\cdots,p+k_3y\cdots\),即每次二操作会使\(y\)的系数变为\(0\)。枚举第\(i\)次操作是第一次二操作,记\(s_1=s-(i\timesx+y\times\dfrac{i(i-1)}{2}+(n-i)\time......
  • CF1928D Lonely Mountain Dungeons
    原题链接设\(F(n,m)\)是将\(n\)个同种族的人放到\(m\)个队伍中可以获得的贡献。可以发现在同一个队伍中的人不能互相产生贡献,所以尽可能平均分配是最优的。设\(p=\lfloor\dfrac{n}{m}\rfloor,q=n\bmodm\),那么有\(m-q\)个队伍中有\(p\)个人,\(q\)个队伍中有\(p+1\)......
  • CF1918F Caterpillar on a Tree
    题意简述你想要遍历一棵大小为\(n\)的树,初始在根节点\(1\),每次你可以花费\(1\)从一个点通过一条边到达另一个点,或者花费\(0\)传送到根节点。求完成遍历的最小代价。\(n\le2\times10^5,k\le10^9\)。分析首先,传送门肯定是在叶子节点使用。其次,遍历顺序是按照子树的深......
  • CF1928C Physical Education Lesson
    原题链接先考虑暴力枚举每个\(k\)是否合法,发现\(k\)合法当且仅当\((2k-2)\mid(n-x)\)或者\((2k-2)\mid(n+x-2)\)并且\(k\geqx\)。因为当\(n\)处于每一段中的第\(1\simk\)个数中时\(n-x\)是上一段的结尾,\(n\)处于每一段中的第\(k\sim2k-2\)个数中时\(n+(x......