洛谷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喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...
随机推荐
- 利用 Databend + COS助力 CDH 分析 | 某医药集团
作者: 黄志武 某医药集团信息中心数据库组组长,13 年数据库行业从业经历,Oracle OCM,关注 Oracle.MySQL.Redis.MongoDB.Oceanbase.Tidb.Polard ...
- StreamJsonRpc.ConnectionLostException 在请求完成之前, 与远程方的 JSON-RPC 连接已丢失
今天电脑重启之后,发现 visual studio 2022 的智能提示与报错经常性不好用,不光不能在正常时候提示代码错误信息,甚至在编译过后也不提示错误.反复重启,刚开始正常,隔一会儿就会提示什么什 ...
- Qt编写物联网管理平台50-超强跨平台
一.前言 跨平台的需求,除了是用户的需求外,也是为了适应日益增长的国产操作系统的发展的需要,当前国产操作系统发展的如火如荼,100%都是围绕linux系统展开,说的好听点就是站在巨人的肩膀上开发,不好 ...
- Windows下用CMake构建和编译第三方依赖库并向C:\Program Files\或C:\Program Files (x86)\目录下安装编译好的静态库(.lib)和动态链接库(.dll)时的步骤和注意事项
从CMake构建和编译第三方依赖库的步骤: 1.下载第三方依赖库的源码,并解压到指定的目录中. 2.在第三方依赖库的的源码所在的目录下(一般是src/目录下)创建一个文件夹build. 3.打开CMa ...
- SHAPEIT算法简介
本文是基于SHAPIT2和SHAPEIT4的,先介绍SHAPEIT2的算法原理,然后简单介绍了一下SHAPEIT4更新的部分.文中介绍主要集中在算法部分,比较简介,具体内容请看参考文献. [SHAPE ...
- ThreeJs-12使用着色器加工材质
一.three框架材质原理与应用 其实three里面所有的材质不管是基础还是点等等之类最终都会编译为shader然后执行,所以如果拿到一个材质我想对某个地方小改一下,那么也是可以用shader来进行修 ...
- 前端学习openLayers配合vue3(面的绘制,至少三个点)
我们学习了点和线的绘制,当然我们也可以绘制一个面 关键代码,需要注意的一点就是面的绘制需要三维数组,线的绘制是个二维数组 const polygonLayer = new VectorLayer({ ...
- Solution Set - “如果惊蛰随梦远走”
目录 0.「UR #15」「UOJ #226」奥林匹克环城马拉松 1.「UR #22」「UOJ #682」月球铁轨 2.「NOI Simu.」箭头 3.「CF 830E」Perpetual Motio ...
- 《深入理解Mybatis原理》Mybatis中的缓存实现原理
一级缓存实现 什么是一级缓存? 为什么使用一级缓存? 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话. 在对数据库的一次会话中, ...
- CF div3 991(A~G)
蒟蒻的第一篇题解.由于正值期末周,只能匆忙地vp了一场div3,并只出了A~E. A 白给模拟题,但也是失误很大的一个题(7分钟时才出,属实是太慢了...) B 一道典题,之前做过类似的. 统计所有数 ...