洛谷P11380 [GESP202412 八级] 排队 题解
数据太可恶了,竟然有重边!!!
题目传送门。
显然一道简单图论题。
把 \(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 八级] 排队 题解的更多相关文章
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 02题解-洛谷 P2395 BBCode转换Markdown 题解
洛谷 P2395 BBCode转换Markdown 题解 题目传送门: here. 一道毒瘤的大模拟,给了你一部分的 BBCode 和 Markdown 语法,叫你转换.如下表: BBCode Mar ...
- 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)
次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...
- 洛谷 p1516 青蛙的约会 题解
dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...
随机推荐
- Flutter枚举
Flutter枚举 Enum Extension 在Dart2.7版本,Dart新增了扩展函数,使枚举相关的代码定义.调用更加简洁 通过扩展枚举定义方法 定义一个元素枚举 enum Element { ...
- Navicat Premium15安装与激活
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不 ...
- Qt音视频开发46-视频传输UDP版
一.前言 上篇文章写道采用的TCP传输视频,优缺点很明显,优点就是不丢包,缺点就是速度慢,后面换成UDP通信,速度快了很多,少了3次握手,而且在局域网中基本上不丢包,就算偶尔丢包,对于一秒钟25-30 ...
- Qt编写项目作品27-多线程文件传输
一.功能特点 多线程收发文件,支持加密传输. 接收端支持监听端口接收文件和主动连接服务器接收文件两种方式. 按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包接收. 可对接收的加密过的文件包进 ...
- Matlab深度学习
View image files Instructions are in the task pane to the left. Complete and submit each task one at ...
- CDS标准视图:维护通知活动信息 I_MaintNotificationActyData
视图名称:维护通知活动信息 I_MaintNotificationActyData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'INOTIFACTY ...
- CDS标准视图:功能位置可用标签 I_FUNCNLLOCALTERNATIVELABEL
视图名称:功能位置可用标签 I_FUNCNLLOCALTERNATIVELABEL 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'Functional Locat ...
- xxl-job安装
---------------------------------------------------------------------------------------------------- ...
- win10 bat文件命令大全-快捷键
具体介绍: 1. echo 和 @回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off ...
- 关于 static 和 final 的一些理解
今天主要回顾一下 static 和 final 这两个关键字. 1. static - 静态 修饰符 - 用于修饰数据(变量.对象).方法.代码块以及内部类. 1.1 静态变量 用 ...