数据太可恶了,竟然有重边!!!

题目传送门。

显然一道简单图论题。

把 \(a_i\) 和 \(b_i\) 的关系想象成一条有向边,于是可以得出:如果 \(x\) 的出度大于 \(1\) 或者 \(x\) 的入度大于 \(1\) 或者图中存在环,那么无解。然后有解的话怎么计数?也很简单,因为一个联通块内肯定是无法变动的了,所以只能连通块之间互换顺序,所以说答案为联通块数量的阶乘。

十年 OI 一场空,不开 long long 见祖宗。

三年 OI 一场空,出现重边见祖宗。

本来我是可以在读入的时候发现无解直接输出 \(0\) 然后退出的,但是某些 OJ 这么做会出现问题(个人亲身经历),所以我就用了一个 \(flag\) 变量记录是否无解。

使用 \(flag\) 代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
const int mod = 1e9+7;
vector<int>a[N];
int chu[N];
int ru[N];
int f[N];
int tong;
int find(int x)
{
return x == f[x]?x:f[x] = find(f[x]);
}
signed main()
{
int flag = 1;
int n,m;
scanf("%d %d",&n,&m);
for(int i = 1;i<=n;i++)
{
f[i] = i;
}
for(int i = 1;i<=m;i++)
{
int x,y;
scanf("%d %d",&x,&y);
int xx = find(x),yy = find(y);
if(find(a[x].begin(),a[x].end(),y)!=a[x].end())
{
continue;
}
if(xx == yy)
{
flag = 0;
}
f[xx] = yy;
a[x].push_back(y);
chu[x]++;
ru[y]++;
if(chu[x]>1||ru[y]>1)
{
flag = 0;
}
}
if(!flag)
{
printf("0");
return 0;
}
for(int i = 1;i<=n;i++)
{
if(f[i] == i)
{
tong++;
}
}
long long sum = 1;
for(int i = 1;i<=tong;i++)
{
sum = sum*i%mod;
}
printf("%lld",sum);
return 0;
}

不使用 \(flag\) 代码(这份代码在洛谷可以通过,但是我不确定其它版本的评测机是否能行,为了保守,大家最好不要使用此代码):

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
const int mod = 1e9+7;
vector<int>a[N];
int chu[N];
int ru[N];
int f[N];
int tong;
int find(int x)
{
return x == f[x]?x:f[x] = find(f[x]);
}
signed main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = 1;i<=n;i++)
{
f[i] = i;
}
for(int i = 1;i<=m;i++)
{
int x,y;
scanf("%d %d",&x,&y);
int xx = find(x),yy = find(y);
if(find(a[x].begin(),a[x].end(),y)!=a[x].end())
{
continue;
}
if(xx == yy)
{
printf("0");
return 0;
}
f[xx] = yy;
a[x].push_back(y);
chu[x]++;
ru[y]++;
if(chu[x]>1||ru[y]>1)
{
printf("0");
return 0;
}
}
for(int i = 1;i<=n;i++)
{
if(f[i] == i)
{
tong++;
}
}
long long sum = 1;
for(int i = 1;i<=tong;i++)
{
sum = sum*i%mod;
}
printf("%lld",sum);
return 0;
}

洛谷P11380 [GESP202412 八级] 排队 题解的更多相关文章

  1. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  2. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  3. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  4. 02题解-洛谷 P2395 BBCode转换Markdown 题解

    洛谷 P2395 BBCode转换Markdown 题解 题目传送门: here. 一道毒瘤的大模拟,给了你一部分的 BBCode 和 Markdown 语法,叫你转换.如下表: BBCode Mar ...

  5. 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)

    次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...

  6. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  7. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  8. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  9. 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】

    题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...

  10. 洛谷 p1516 青蛙的约会 题解

    dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...

随机推荐

  1. 断言、drf之请求与响应

    目录 一.断言 二.drf之请求 2.1 Request能够解析的前端传入的编码格式 2.2 Request类有哪些属性和方法(学过) 常用参数 Response类的实例化参数 三.drf之响应 3. ...

  2. EverEdit插件-CHM助手:一种免费、高效的CHM手册制作方式

    1 EverEdit插件-CHM助手:一种免费.高效的CHM手册制作方式 1.1 前言   业界制作CHM手册的工具多如牛毛,高贵的商业工具如:HelpNDoc.Help+Manual.HelpSmi ...

  3. tc端口流量控制(带宽限速)

    tc qdisc add dev ens192 root handle 1: htbtc class add dev ens192 parent 1: classid 1:1 htb rate 80m ...

  4. java -jar命令运行jar包时指定外部依赖jar包

    你们都知道一个java应用项目能够打包成一个jar,固然你必须指定一个拥有main函数的main class做为你这个jar包的程序入口.具体的方法是修改jar包内目录META-INF下的MANIFE ...

  5. SpringBoot整合WebSocket实践

    简介 先来看下维基百科WebSocket的简介: WebSocket是一种与HTTP不同的协议.两者都位于OSI模型的应用层,并且都依赖于传输层的TCP协议. 虽然它们不同,但是RFC 6455中规定 ...

  6. DataTable 循环取值

    //list是datatable类型 for (int i = 0; i < list.Rows.Count; i++) { var A = list.Rows[i]["列名" ...

  7. Anaconda下载以前的旧版本

    由于Anaconda新的版本,可能不太适合我们当前开发,我们需要下载历史版本. 可以尝试从两个地方下载:1.推荐从 "清华大学开源软件镜像站" 下载:https://mirrors ...

  8. vue 路由警告 Duplicate named routes definition

    今天在开发的时候,项目报了一个警告  Duplicate named routes definition ,这里记录一下解决方式和思路. 警告产生的原因根据提示内容,我们大概猜测是和路由的name有关 ...

  9. 字符串编码(ASCII, GBK, ANSI, Unicode(‘u‘), UTF-8编码)(转载)

    [版权声明]本篇文章以征得博主同意,再行转载. 出自[hxxjxw] 原文链接:https://blog.csdn.net/hxxjxw/article/details/90140663 目录 字符串 ...

  10. Python在多个Excel文件中找出缺失数据行数多的文件

      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内.某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法. ...