VIJOS p1023 Victoria的舞会3 终于AC了!!!

DeepSeek高阶应用:DeepSeek+Coze构建智能文献综述与趋势分析自动化系统 本文详细介绍了如何利用DeepSeek与Coze构建智能文献综述与趋势分析自动化系统。通过DeepSeek的深度语义理解和结构化信息提取能力,结合Coze的可视化工作流编排,实现学术论文的自动解析、分类整理与知识入库。该系统能7x24小时自动追踪领域前沿,将研究人员从繁琐的文献处理中解放出来,专注于更高层次的思考与创新。 阅读详情

图论一直以来都很弱,又不懂什么最小点基(实现方法)……AC的时候……真爽啊。。。。。

Victoria的舞会3 Victoria的舞会 系列  
   
   
 
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
-------------------------
Accepted 有效得分:100 有效耗时:0ms

hoho~

先把题贴一下:

描述 Description  
    Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。
  Victoria准备邀请n个已经确定的人,可是问题来了:
  这n个人每一个人都有一个小花名册,名册里面写着他能够通知到的人的名字。比如说在A的人名单里写了B,那么表示A能够通知到B;但是B的名单里不见的有A,也就是说B不见得通知到A。
  Victoria觉得需要确定自己需要通知多少个人m,能够实际将所有人n都通知到。并求出一种方案以确定m的最小值是多少。
  注意:自己的名单里面不会有自己的名字。Victoria可以自身通知到所有n个人。
   
   
 输入格式 Input Format 
  第一行一个数n。接下来n行,每i+1行表示编号为i的人的小花名册名单,名单以0结束。1<=n<=200。
   
   
 输出格式 Output Format 
  一个数,m。
   
   
 样例输入 Sample Input  
 

18
0
11 0
0
0
0
16 0
14 0
0
0
0
2 13 0
0
11 0
7 0
0
6 0
0
0

   
   
 样例输出 Sample Output  
  14
   
   
 时间限制 Time Limitation 
  各个测试点1s

貌似有一个类似模拟的办法,VIJOS上有人说过了。

以下是我苦思冥想出来的成果,没想到一遍就AC了。

1 把原有向图G中强连通分量缩为一点

    1.1 DFS(G),记录节点访问完成的顺序,也可以说是一次拓扑排序。

    1.2 反转图每一条弧得到新图Gt。

    1.3 按照1.1记录的顺序DFS(Gt),得到的森林里每一棵树都是一个强连通分量。(用并查集合并每一个访问到的节点,从而实现“缩”强连通分量)。得到一强连通分量为单位的图Gscc。

2 DFS(Gscc),再一次拓扑排序,记录强连通分量访问完成的顺序。

4 按照2记录的顺序DFS(Gscc),用并查集得到访问产生的森林。

5 统计最后森林中树的个数即可得到答案。

 

程序(K&R风格代码)有120+行的样子。。。

 

 

#include < stdio.h >
#include
< stdbool.h >
void  toposort( void );
void  topovisit( int  i);
void  reverse( void );
void  contract( void );
void  convisit( int  i);
void  contract2( void );
void  convisit2( int  i);
 
int  rank[ 201 ], set [ 201 ];

void  Makeset( int  x)
{
        
set[x]=x;
        rank[x]
=0;
}

int  Find( int  x)
{
        
if(set[x]!=x)
                
set[x]=Find(set[x]);
        
return set[x];
}

void  Link( int  x, int  y)
{
        
if(rank[x]>rank[y])
                
set[y]=x;
        
else{
                
set[x]=y;
                
if(rank[x]==rank[y]) rank[y]++;
        }

}

void  Union( int  x, int  y)
{
        Link(Find(x),Find(y));
}


int  n,topo[ 201 ],p; 
int  nc;
bool  gt[ 201 ][ 201 ],g[ 201 ][ 201 ],vis[ 201 ];
int  main( void )
{
        
int i,j,k;
        
int t,count=0;
        FILE 
*fin=stdin;
        fscanf(fin,
"%d ",&n);
        nc
=n;
        
for(i=0;i<n;i++){
                
while(1){
                        fscanf(fin,
"%d", &t);
                        
if(!t) break;
                        g[i][t
-1]=true;
                }

                Makeset(i);
        }

        toposort();
        reverse();
        contract();
        toposort();
        contract2();
        
for(i=0;i<n;i++) if(set[i]==i) count++;
        printf(
"%d ",count);
        
return 0;
}

void  toposort( void )
{
        
int i;
        memset(vis,
0,sizeof(vis));
        p
=0;
        
for(i=0;i<n;i++) if(!vis[i]) topovisit(i);
}

void  topovisit( int  i)
{
        
int j;
        vis[i]
=true;
        
for(j=0;j<n;j++){
                
if(g[i][j] && Find(i)!=Find(j) && !vis[j]){
                        topovisit(j);
                }

        }

        topo[p
++]=Find(i);
        
}

void  reverse( void )
{
        
int i,j;
        
for(i=0;i<n;i++)
                
for(j=0;j<n;j++)
                        
if(g[i][j]) gt[j][i]=true;
}

void  contract( void )
{
        
int j;
        memset(vis,
0,sizeof(vis));
        
for(j=0;j<n;j++) if (!vis[topo[j]]) convisit(topo[j]);
}

void  convisit( int  i)
{
        
int j;
        vis[i]
=true;
        
for(j=0;j<n;j++){
                
if(gt[i][j] && !vis[j]){
                        Union(i,j);
                        convisit(j);
                }

        }

}

void  contract2( void )
{
        
int j;
        memset(vis,
0,sizeof(vis));
        
for(j=0;j<p;j++) if (!vis[topo[j]]) convisit(topo[j]);
}

void  convisit2( int  i)
{
        
int j;
        vis[i]
=true;
        
for(j=0;j<n;j++){
                
if(g[i][j] && !vis[j]){
                        Union(i,j);
                        convisit(j);
                }

        }

}

Data-Structures-and-Algorithm-Analysis-in-Java.pdf 作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo... 立即下载

相关推荐

【UE5 C++开发指南】从零配置Visual Studio 2022开发环境

本文详细指导如何从零开始为UE5 C++开发配置Visual Studio 2022环境。文章强调了VS2022与UE5的深度兼容性,并逐步讲解了社区版下载、核心工作负载(如“使用C++的游戏开发”)与组件安装、界面优化、专属工具设置以及首个C++项目的创建与验证流程,帮助开发者高效搭建专业开发环境。

weixin_29016865的博客 392

Victoria的舞会2——图的连通性及连通分量

【Vijos1022]】Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。 Victoria准备邀请n个已经确定的人,可是问题来了: 这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字。比如说在A的人名单里写了B,那么表

在思索中前行! 1319

(超全面,超基础)Kriging插值推导理论笔记,算法,普通克里金

最近老师让我再重新推导一下克里金插值的方法如何求出预测结果,于是我又无数次地打开了大神的推导原理过程链接????:克里金(Kriging)插值的原理与公式推导 作者:xg1990,但是不可避免地在推导过程中,数学知识基础薄弱的我卡住在一些公式推导的步骤中。 所以就想基于上面大神的推导过程,将里面的推导写得更具体些,当然觉得毫不吃力可以进行推导的大神们可以不看我的注释,直接点开链接看就好。 我看到csdn中很多关于克里金推导的博客里面的内容直接截屏或者复制了上面链接里大神发表的内容,也不注

Olivel1997的博客 1万+

Vijos1022. Victoria的舞会2

试题请参见: https://vijos.org/p/1130 题目概述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理 1. 不作任何处理; 2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3. 加上数后,继续按此规则进行处理,直到不能再立生自然数为止. 输入 一个自然数n.

Infinite Script 2357

2d游戏地图编辑器_[U3D]基于MarchingCubes实现的War3Editor 地表/悬崖编辑器

花了几天时间研究清楚Marching cubes后,发现这个方法是一个非常适用于地图编辑,网格编辑,procedural 生成的工具。最大的优点有着较好的边缘,表面处理。然后我用U3D写了一个悬崖/地表的编辑器。其中使用到了Marching Cubes的2.5D,2D两种降维的方法。talk is cheap,让我看效果!DemoEditor展示https://www.zhihu.com/vide...

weixin_42504649的博客 1178

编译原理(东南大学)一:【编译原理期末冲刺救命笔记】速存!看完再上考场稳了!

本文详细介绍了编译原理的核心概念和流程,包括程序设计语言的分类、编译程序的各个阶段(如词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成)以及编译程序生成和构造的基础知识。文章还探讨了编译中的表格管理、出错处理和遍的概念,以及编译基础知识如高级语言、语法规则、字母表和符号串的运算。此外,文中还涉及文法与语言的关系,包括文法的概念、非终结符、终结符、产生式、推导和规约等。整体内容旨在为学习编译原理的学生提供全面的复习资料和考试准备指南。

一位搞嵌入式和前端的genius的博客 1027

vijos1023 Victoria的舞会3

这道题我用的是floyd预处理,并查集的思想。虽然实现很简单,但是有很多细节问题还是值得认真研究的。 https://www.vijos.org/p/1023 先上一下我之前错的代码: //#include #include #include #include #include #include #include #include #include #include #include #

zhangxian___的博客 434

从零构建Carsim线控转向仿真:模型搭建、算法集成与整车联动实战

本文详细介绍了从零开始基于Carsim和Simulink搭建线控转向仿真模型的完整实战流程。内容涵盖RWA前轮执行器动力学建模与PID控制、卡尔曼滤波器估算齿条力、HWA方向盘手感模拟算法设计,以及最终实现HWA与RWA闭环联动并进行整车仿真调试。通过分步拆解,帮助读者深入理解线控转向系统的核心原理与工程实现。

weixin_29158413的博客 251

求助大神解答

这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字。而且如果A名单里面有B,那么B名单里面肯定有A,也就是说两个人如果一方愿意和另一方交流,那么另一方也肯定愿意和这一方交流。Victoria觉得需要在这n个人里面确定m个人,保证这m个人每一个人都能在舞会中找到至少k个人交流,并求出一种方案以确定m的最大值是多少。现在给定一个n个点m条边的无向图,问在小明的评分方法下,分数为多少。一个无向图的分数定义为,各个连通块是树的数量。于是,他发明了自己的对于无向图的评分方法。

LIYUNINGMENG的博客 274

探索CompletableFuture:高效异步编程的利器

随着现代软件系统的复杂性和用户需求的多样化,异步编程成为了提升系统性能和响应速度的重要手段。在Java领域,CompletableFuture作为Java 8引入的新特性,提供了强大的异步编程能力,极大地简化了多线程和并发任务的处理。本文将深入探讨CompletableFuture的基本功能和使用方法,介绍如何利用其提升程序的并发性能和代码的可维护性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

victoria的舞会1 java_Victoria的舞会1

描述:Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。Victoria准备邀请n个已经确定的人,可是问题来了:这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字。比如说在A的人名单里写了B,那么表示A愿意与B交流;而且如果A名单里面有B,那么B名单里面肯定有A,也就是说两个人如果一方愿意和另一方交流...

weixin_28872105的博客 182

14、多标签分类与卷积神经网络在医学图像处理中的应用

本文探讨了多标签分类与卷积神经网络(CNN)在医学图像处理中的应用。文章详细介绍了多标签分类的概念和挑战,以及如何通过CNN进行高效、准确的分类任务。内容涵盖模型设计、损失函数选择、数据增强技术、类别权重调整等关键技术点,并结合实际案例,如白内障手术工具检测、视网膜血管分割等,展示了CNN在医学图像分析中的强大潜力。此外,还讨论了模型优化策略及面临的挑战与解决方案。

t8u9v0的博客 191

|Vijos|图论强连通分量|P1023 Victoria的舞会3

https://vijos.org/p/1023 此题虽然可以并查集AC,但是实际上并查集是错误的 这道题只能用tarjan算法求强连通分量,因为这个是一个有向图,而并查集只能求无向图的强连通分量 #include #include #include #include #include #include #define ms(i,j) memset(i, j, sizeof(i)); usi

博客停更,请到"再见,优快云"文章中找新博客地址 593

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[vijos P1023] Victoria的舞会3

这…本来想学习一下Tarjan算法的,没想到码都码好了发现这题不是求强连通分量而是简单的连通分量…图论基础都还给老师了啊啊啊!最后深搜通通解决! v标记是否被访问过,scc标记每个的祖先(本来想写Tarjan的才弄出这么奇葩个数组名字),w用于最后的统计。 program vijos_p1023; var map:array[0..210,0..210] of longint; ...

weixin_34044273的博客 146

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【基础练习】【强连通tarjan】vijos1021-1023 Victoria的舞会系列题解

题目连接:https://vijos.org/p/Victoria%E7%9A%84%E8%88%9E%E4%BC%9A 这是一个图论的系列题目,题目比较简单,主要在于数据实在是弱···两百个点暴搜都能过啊··· vijos用户体验还是不错的 除了管理不太严格导致题解混乱 虽然二老板在但也长期无人打理  如果照管好 这一定会是一个相当出色的OJ 1021 舞会1 这道题目其实就是简

西家家 1089

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vijos--P1021Victoria的舞会1贪心

题目: 描述 Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。 Victoria准备邀请n个已经确定的人,可是问题来了: 这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字。比如说在A的人名单里写了B,那么表示A愿意与B交流;而且如果A名单里面有B,那么B名单里面肯定有A,也就是说两个人如果一方...

weixin_44606952的博客 355

颇有成绩的一天(第十二天)

       今天可好,今天早上五点多起来,不过昨天晚上睡的很晚,早上起来就决定投简历,想了很久了,因为现在找工作的人太多了,我知道任何一个人事部经理的邮箱每天都会很着无数的邮件,所有要想在前面让各个经理看见自己的邮件就必须在他的邮箱前面,所以选择今天早上在经理上班之前发到他手上。这也是一个细节,刚刚看了《细节决定成败》就得以运用啊。随便也将自己的题目改为“有项目经验的应届生”这样希望能更加吸引眼

flyerhua的专栏 537

我的作品截图

作品一:3D射击游戏1.工程框架2.主菜单界面3.选择关卡界面4.游戏场景5.接任务场景6.进行任务场景7.完成任务场景作品二:2D推箱子1.工程框架2.游戏进行3.地图编辑器

panmmjun的专栏 373

【图论】【Floyed】舞会邀请(CODE[VS] 2604)

舞会邀请 CODE[VS] 2604 题目大意:Smart要叫一些人开Party,每个人可以通知一部分人,Smart去通知一些人,再让这些人去通知其他人,问Smart最少通知几个人,可以使全部人都被通知到

ssllyf的博客 400

百度地图学习总结(2)—Hello-BaiduMap

接上一篇: http://blog.youkuaiyun.com/user11223344abc/article/details/781543571.集成前想想申请了半天,感觉累累哒,迫不及待的就想看见点什么,于是开始集成,集成就涉及到一个问题,百度地图sdk都是分模块的,那么我思考我的大体目标是: 基础地图:基本展示,隐藏地图右下角加减号,将距离比例尺调小… 全量定位:包含基础,离线,室内… 云检索:poi

点滴积累 744

我的作品

1.ESFramework通信框架 ESFramework 是一套性能卓越、稳定可靠、强大易用的跨平台通信框架,支持应用服务器集群。其内置了消息的收发与自定义处理(支持同步/异步模型)、消息广播、P2P通道、文件传送(支持断点续传)、心跳检测、断线重连、登录验证、在线用户管理、好友与群组管理、性能诊断等功能。基于ESFramework,您可以方便快捷地开发出各种优秀的网络通信应用。此外,我们在长...

weixin_33670786的博客 155

【vijos】P1022 Victoria的舞会2

题解 #include #include using namespace std; int father[300]; int a[300]; void init(int n) { for(int i=1;i<=n;i++) father[i]=i; } int find(int x) { if(x!=father[x]) father[x]=find(father[x]); re

zhuml123的专栏 576
上一篇: C语言:用负数作数组下标?YES!
下一篇: USACO Prime Cryptarithm Accepted
DaNmarner
博客等级 码龄21年 27粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值