【bzoj1064】【NOI2008】【假面舞会】【dfs】

[NOI2008] 假面舞会 如果整个图没有环,且不存在两条共用起点和终点的相交链,显然最多能分的种类数是每个连通分量内最长链的长度之和。 如果整个图是由若干个不相交的环构成的话,最多能分的种类数是所有环长度的最大公约数(找环的时候,可以从连通块内的任意一点开始编号,第二次经过一个点的时候,它第二次的编号减去第一次的编号就是环的大小)。 除了这两种特殊情况之外,还有两种情况: 两个环之间有公共部分(指至少共用两个点)。 存在两个链共用起点和终点。 对于情况 1,合法的面具数一定是这两个环长度的公约数。 对于情况 2,合法的面具 阅读详情

Description

一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具。每个面具都有一个编号,主办方会把此编号告诉拿该面具的人。为了使舞会更有神秘感,主办方把面具分为k (k≥3)类,并使用特殊的技术将每个面具的编号标在了面具上,只有戴第i 类面具的人才能看到戴第i+1 类面具的人的编号,戴第k 类面具的人能看到戴第1 类面具的人的编号。 参加舞会的人并不知道有多少类面具,但是栋栋对此却特别好奇,他想自己算出有多少类面具,于是他开始在人群中收集信息。 栋栋收集的信息都是戴第几号面具的人看到了第几号面具的编号。如戴第2号面具的人看到了第5 号面具的编号。栋栋自己也会看到一些编号,他也会根据自己的面具编号把信息补充进去。由于并不是每个人都能记住自己所看到的全部编号,因此,栋栋收集的信 息不能保证其完整性。现在请你计算,按照栋栋目前得到的信息,至多和至少有多少类面具。由于主办方已经声明了k≥3,所以你必须将这条信息也考虑进去。

Input

第一行包含两个整数n, m,用一个空格分隔,n 表示主办方总共准备了多少个面具,m 表示栋栋收集了多少条信息。接下来m 行,每行为两个用空格分开的整数a, b,表示戴第a 号面具的人看到了第b 号面具的编号。相同的数对a, b 在输入文件中可能出现多次。

Output

包含两个数,第一个数为最大可能的面具类数,第二个数为最小可能的面具类数。如果无法将所有的面具分为至少3 类,使得这些信息都满足,则认为栋栋收集的信息有错误,输出两个-1。

Sample Input

【输入样例一】

6 5
1 2
2 3
3 4
4 1
3 5

【输入样例二】

3 3
1 2
2 1
2 3

Sample Output

【输出样例一】
4 4

【输出样例二】
-1 -1

HINT

100%的数据,满足n ≤ 100000, m ≤ 1000000。

题解:首先从一个点连出去的点标号肯定一样。

            同理如果几个点指向同一个点。那他们的标号也一样。

            把这些关系收缩一下。那么图中就会形成一些环和一些链。

            对于链,无论k等于几都是可以满足的。

            对于环。满足这个环的k的最大值是它的大小。

            同时这个环的大小的约数也是可以满足的。

            所以如果有环找出这些环,k的最大值就是这些环的大小的最大公约数。

            k的最小值就是k的最大值中第一个大于等于3的约数。

            如果没有环,k的最大值就是所有等价链的链长之和。最小值显然是3.

            为了找到这些环。我们把每条边拆成两条。以前的边权值为1,新加的边权值为-1.

            然后我们dfs每个联通块。在dfs途中对每个点标号,标号的值就是已经经过的权值和。

            在dfs中如果发现某个点已经被dfs过了。说明找到一个环。

            那么这个环的大小就是你将要对他标的号和他已有的标号的差的绝对值。 

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 100010
#define M 1000010
using namespace std;
int n,m,x,y,p[N],fa[N],maxx[N],minn[N],point[N],next[2*M],cnt,r1,r2,ans,ans2,temp;
bool f[N];
struct use{int st,en,v;}e[M*2];
int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
int abs(int x){if (x<0) return -x;else return x;}
void add(int x,int y,int w){
    next[++cnt]=point[x];point[x]=cnt;
    e[cnt].st=x;e[cnt].en=y;e[cnt].v=w;
}
int find(int x){if (x!=fa[x]) fa[x]=find(fa[x]);return fa[x];}
void dfs(int x){
   maxx[temp]=max(maxx[temp],p[x]);minn[temp]=min(minn[temp],p[x]);f[x]=true;
   for (int i=point[x];i;i=next[i]){
       if (!f[e[i].en]){p[e[i].en]=p[x]+e[i].v;dfs(e[i].en);}
       else ans=gcd(ans,abs(p[x]+e[i].v-p[e[i].en]));
    }   
}
int main(){
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) fa[i]=i;memset(minn,127/3,sizeof(minn));
    for (int i=1;i<=m;i++){
       scanf("%d%d",&x,&y);
       add(x,y,1);add(y,x,-1);
       r1=find(x);r2=find(y);
       if (r1!=r2) fa[r1]=r2;
    }
    for (int i=1;i<=n;i++) if (!f[i]) {temp=find(i);dfs(i);}
    for (int i=3;i<=ans;i++) if (ans%i==0){ans2=i;break;}
    if (ans2<3) ans2=3;temp=0;
    if (ans==0) for (int i=1;i<=n;i++) if (i==fa[i]) temp+=maxx[i]-minn[i]+1;    
    if (ans==0) ans=temp;
    if (ans<3) {ans=-1;ans2=-1;}
    printf("%d %d\n",ans,ans2);
}


将pytroch模型转为paddlelite模型并集成到android程序中 在android中使用paddlelite加载yolov5模型识别opencv读取的摄像头信息 阅读详情

相关推荐

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1652

【BZOJ1064】【NOI2008】假面舞会

原题链接 1064: [Noi2008]假面舞会Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1239 Solved: 612 [Submit][Status][Discuss] Description一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个自己

function2的博客 478

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 524

[BZOJ 1064][NOI 2008]假面舞会(图论+BFS)

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1064题目大意给一个有向图染色,一个点的后继的颜色必须全部相同,问最多多少种颜色,最少多少种思路为了便于叙述,以下面具的种类数简称类数,图中不同的颜色代表不同类别的面具,一种面具简称一种颜色。 如果这个有向图是一棵树的话,那么树上每个点的儿子颜色必须都相同,如下图 手模下可以发现这种情况

某沙茶的OI代码库 1518

Type-c超声波切割刀

接下来,我将提供Type-C超声波切割刀项目的C代码实现示例,代码将按照上述分层架构和模块化设计进行组织。为了达到3000行以上的代码量,我将尽可能详细地实现各个模块的功能,并添加必要的注释和错误处理。通过采用分层架构和模块化设计,我们可以建立一个可靠、高效、可扩展的系统平台,为产品的成功奠定坚实的基础。实际项目中,需要更详细的硬件驱动、更完善的功能模块、更严格的测试验证和更周全的维护升级计划。针对Type-C超声波切割刀这个项目,我将从以下几个方面详细阐述最适合的代码设计架构,并提供具体的C代码实现。

lianmengde的博客 1194

【VSCode】【Clangd】从零构建:基于LLVM/Clangd+MINGW+CMake的Windows高性能C/C++开发环境实战

本文详细介绍了如何在Windows平台搭建基于LLVM/Clangd+MINGW+CMake的高性能C/C++开发环境。通过VSCode配置Clangd语言服务器,结合MINGW提供的GCC工具链和CMake的跨平台构建能力,实现轻量级、高效率的开发体验。文章包含从环境准备到实战配置的完整指南,特别适合追求开发效率和跨平台兼容性的开发者。

weixin_28839629的博客 314

bzoj 1064 假面舞会

这是一道不错的题,膜拜题解 一个很巧妙的处理:搜索拓扑图最长链时,设反向边的长度是-1,那么任选一个节点开始dp就能获得正确答案。  #include#include#include#include#include#define md#define ll long long#define inf (int) 1e9#define eps 1e-8#define N 100010#define

heheda_is_an_OIer的博客 472

把STM32MP135当单片机玩:实战SD卡脱机运行LED程序(基于MP135DK开发板)

本文详细介绍了如何在STM32MP135开发板上实现SD卡脱机运行LED程序,通过裸机开发方式(Bare Metal)利用HAL库完成GPIO控制,并解析了SD卡启动流程。内容涵盖工程创建、代码编写、SD卡烧录及常见问题排查,为开发者提供了一种高性能单片机开发方案。

weixin_33734785的博客 242

【BZOJ1064】[Noi2008]假面舞会 DFS树

【BZOJ1064】[Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具。每个面具都有一个编号,主办方会把此编号告诉拿该面具的人。为了使舞会更有神秘感,主办方把面具分为k (k≥3)类,并使用特殊的技术将每个面具的编号标在了面具上,只有戴第i ...

weixin_30737433的博客 91

从零开始:C#上位机集成YOLO完成摄像头目标追踪(保姆级教程)

新手入门C#上位机+YOLO做摄像头目标追踪,最忌讳的是“只抄代码,不懂逻辑”。这个教程不仅给了完整代码,还把核心原理和踩坑点都讲清楚了,新手跟着走,不仅能跑通demo,还能理解为什么这么写。如果你们在运行时遇到具体问题,比如模型导出失败、代码报错,都可以在评论区留言,我会一一解答。后续也可以出一期工业相机+YOLO目标追踪的教程,帮助大家把demo落地到实际生产中。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1030

Java零基础之多线程篇:线程间如何通信?

随着计算机技术的发展,多线程编程已经成为现代软件开发中的一个重要方向。在多线程编程中,线程间的通信是一个非常关键的问题。在Java开发语言中,Java提供了一些机制来实现线程间的通信,帮助开发者协调不同线程之间的执行顺序和数据交换。本文将介绍Java多线程编程中的线程间通信的相关知识。首先,我们将从简介开始,介绍线程间通信的基本概念和原理。然后,我们将通过源代码解析的方式,深入探讨Java中实现线程间通信的方法。接着,我们将给出一些应用场景案例,展示线程间通信在实际开发中的应用。

喵手的博客 1558

【BZOJ1064】[Noi2008]假面舞会【DFS】【分类讨论】

【题目链接】 以为要分层图...没思路,去看题解,膜拜proverbs【proverbs的题解】 /* Footprints In The Blood Soaked Snow */ #include #include using namespace std; const int maxn = 100005, maxm = 1000005; int n, m, head[max

BraketBN 501

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[BZOJ]1064 [NOI2008] 假面舞会 dfs判环

1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2160  Solved: 1047 [Submit][Status][Discuss] Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个

Le Petit Prince 393

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BZOJ 1064 NOI2008 假面舞会 DFS

题目大意:给定n个人,分别戴着k类面具(k>=3,k未知),其中戴着i类面具的人能看见第i%k+1类人的面具,给定一些人互相看到的关系,求k的最大最小值 题解见 http://www.cnblogs.com/proverbs/archive/2013/01/17/2865093.html DFS求环长度 注意当图中不存在环时k的最大值为所有连通图中最长链的长度之和 正边权值为+1 负边权值

世界 2109

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

bzoj 1064: [Noi2008]假面舞会(DFS)

1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2240  Solved: 1083 [Submit][Status][Discuss] Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个

加载中... 473

【BZOJ1064 】[NOI2008] 假面舞会(图上DFS)

点此看题面 大致题意:有k种面具(k是一个未知数且k≥3,每种面具可能有多个),已知戴第i种面具的人能看到第i+1种面具上的编号,特殊的,戴第k种面具的人能看到第1种面具上的编号,现在用x和y来表示戴着第x号的面具的人能看到第y号面具的编号,给你m组x和y(信息可能并不完整),请你求出至多和至少有多少个面具。 这道题可以近似地看作一个有向图,但是有向图在这道题目中是极难操作的,因此我们可以用一...

CXR的博客 294

BZOJ1064 [Noi2008]假面舞会 【dfs】

题目 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具。每个面具都有一个编号,主办方会把此编号告诉拿该面具的人。为了使舞会更有神秘感,主办方把面具分为k (k≥3)类,并使用特殊的技术将每个面具的编号标在了面具上,只有戴第i 类面具的人才能看到戴第i+1 类面具的人的编号,戴第k 类面具的人能看到戴...

weixin_30399871的博客 71

BZOJ 1064 假面舞会(NOI2008) DFS判环

BZOJ 1064 假面舞会

DaD3zZ , To be a Beyonder! 612

BZOJ1064 NOI2008假面舞会(dfs树)

  将图中的环的长度定义为正向边数量-反向边数量,那么答案一定是所有环的环长的共同因子。dfs一下就能找到图中的一些环,并且图中的所有环的环长都可以由这些环长加加减减得到(好像不太会证)。如果有环长为1或2则无解。   没有环的话图就是一个有向树。类似定义链的长度,那么一个连通块内答案就是最长链,也即dfs树上最大深度-最小深度+1,对所有连通块累加即可。 #include<iost...

weixin_30807779的博客 134

bzoj 1064: [Noi2008]假面舞会 (图论+DFS)

题目描述传送门题目大意:共n个人,k(k>3)种面具,只有戴第i 类面具的人才能看到戴第i+1 类面具的人的编号,戴第k 类面具的人能看到戴第1 类面具的人的编号。给出m对关系,(x,y)表示x可以看到y。现在请你根据给出的关系计算,至多和至少有多少类面具。如果k<3或者信息有误,输出-1.题解给出的是一个有向图,求出的k必须满足是所有环上点数的倍数,那么最直接的想法一定是找出所有的环求环上点数的g

clover_hxy的博客 683

bzoj1064 [Noi2008]假面舞会(图论+dfs)

图论神题orz如果这个图有环,那么最大的就是所有环长的gcd。这里有环不仅仅指有向图上的环,一些边反向后可以成环的也算(因为这种相当于两条收尾相同的链,它隐含着一个长度为两条链的长度的差的环)。为了方便,我们把有向边x->y,拆成正向边x->y,1和反向边y->x,-1。这样环长就直接是环长了。最小的就是>=3的最小的gcd的因数。如果没有环,我们考虑原图的一个连通块,他最多有最长链上的点数个颜色,

Icefox的博客 410
上一篇: 【bzoj3524】【poi2014】【couriers】【可持久化线段树】
下一篇: 【bzoj4173】【数学】【数论】
sunshinezff
博客等级 码龄12年 40粉丝 452原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值