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

题目传送门。

显然一道简单图论题。

把 \(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. powershell禁止系统运行脚本

    错误信息: set-executionpolicy remotesigned set-executionpolicy : Windows PowerShell 已成功更新你的执行策略,但在更具体的作业 ...

  2. 关于 Span 的一切:探索新的 .NET 明星: 1 Span<T> 是什么?

    关于 Span 的一切:探索新的 .NET 明星 https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp- ...

  3. Qt开发经验小技巧196-200

    关于Qt延时的几种方法. void QUIHelperCore::sleep(int msec) { if (msec <= 0) { return; } #if 1 //非阻塞方式延时,现在很 ...

  4. GeoJSON代码示例

    GeoJSON代码示例 1. 读取GeoJSON文件 1.1 实现思路 graph TD A[读取GeoJSON文件] --> B[读取GeoJSON文件内容] B --> C[解析Geo ...

  5. [LC735]行星碰撞

    题目描述 给定一个整数数组 asteroids,表示在同一行的行星.对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相同的速度移动 ...

  6. Mac安装brew的四种方法(指定能行)

    一,执行brew官网命令安装brew https://brew.sh/ 官网中复制下图中命令,在terminal中输入该命令,即: /bin/bash -c "$(curl -fsSL ht ...

  7. react父传子(以及默认值)

    子组件 import React, { Component } from "react"; import "./base.css" // 父组件 export ...

  8. 【译】.NET 升级助手现在支持升级到集中式包管理

    原文 | McKenna Barlow 翻译 | 郑子铭 最近,.NET 升级助手引入了一些有用的新功能和一种新的中央包管理 (CPM) 升级类型. .NET 升级助手可帮助您将解决方案升级到较新版本 ...

  9. CBAM注意力模型介绍

    本文分享自天翼云开发者社区<CBAM注意力模型介绍>,作者:Liuzijia 近年来,注意力机制在各项深度学习任务中表现出色.研究表明,人类视觉感知过程中,注意力机制发挥了积极的效果,可以 ...

  10. Protobuf生成文件报错

    Mac下protobuf生成文件报错问题解决办法,windows下就不会这么麻烦了,如果linux下出现类似报错信息按照下面的解决逻辑依然适用. 1.由--go_out引发的报错 1.报错信息: us ...