Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >codevs 原创抄袭题 5969 [AK]刻录光盘

codevs 原创抄袭题 5969 [AK]刻录光盘

作者头像
attack
发布于 2018-04-12 08:20:57
发布于 2018-04-12 08:20:57
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

题目描述 Description

 • 在FJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光盘,怎么办呢?! •  DYJ分析了一下所有营员的地域关系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一个人拿到光盘后,其他人可以带着U盘之类的东西去拷贝啊! •  他们愿意某一些人到他那儿拷贝资料,当然也可能不愿意让另外一些人到他那儿拷贝资料,这与我们FJOI宣扬的团队合作精神格格不入!!! •  现在假设总共有N个营员(2<=N<=200),每个营员的编号为1~N。DYJ给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那儿拷贝资料。当然,如果A愿意把资料拷贝给B,而B又愿意把资料拷贝给C,则一旦A获得了资料,则B,C都会获得资料。 •  现在,请你编写一个程序,根据回收上来的调查表,帮助DYJ计算出组委会至少要刻录多少张光盘,才能保证所有营员回去后都能得到夏令营资料?

输入描述 Input Description

先是一个数N,接下来的N行,分别表示各个营员愿意把自己获得的资料拷贝给其他哪些营员。即输入数据的第i+1行表示第i个营员愿意把资料拷贝给那些营员的编号,以一个0结束。如果一个营员不愿意拷贝资料给任何人,则相应的行只有1个0,一行中的若干数之间用一个空格隔开。

输出描述 Output Description

一个正整数,表示最少要刻录的光盘数。 

样例输入 Sample Input

2 4 3 0 

4 5 0 

1 0 

样例输出 Sample Output

1

数据范围及提示 Data Size & Hint

2<=N<=200

思路:Flyoed+KO暴力

  这里需要注意一点就是nmap数组一开始可能会写成nmap[j][i]=1但实际上不是,如果nmap[j][i]=1的话极端数据会出错,我也不知道为什么

  so nmap数组理论上可以去掉。

  坑爹的数据啊。。。。。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 using namespace std;
  5 const int maxn=0x7fffffff;
  6 int map[101][101];
  7 int nmap[101][101];
  8 int n;
  9 int vis[101];
 10 int pass[101];
 11 int now=1;
 12 int tot;
 13 void dfs(int p)
 14 {
 15     vis[p]=1;
 16     for(int i=1;i<=n;i++)
 17     {
 18         if(vis[i]==0&&map[p][i]==1)
 19         {
 20             dfs(i);
 21         }
 22     }
 23     pass[now]=p;
 24     now++;
 25 }
 26 void ndfs(int p)
 27 {
 28     vis[p]=0;
 29     for(int i=1;i<=n;i++)
 30     {
 31         if(vis[i]==1&&nmap[p][i]==1)
 32         {
 33             ndfs(i);
 34         }
 35     }
 36 }
 37 int main()
 38 {
 39     for(int i=1;i<=101;i++)
 40     for(int j=1;j<=101;j++)
 41     {
 42         map[i][j]=maxn;
 43         nmap[i][j]=maxn;
 44     }
 45     scanf("%d",&n);
 46     for(int i=1;i<=n;i++)
 47     {
 48         int j;
 49         while(scanf("%d",&j))
 50         {
 51             if(j==0)
 52             break;
 53             else
 54             {
 55                 map[i][j]=1;
 56                 nmap[i][j]=1;
 57             }
 58         }
 59     }
 60     for(int k=1;k<=n;k++)
 61     {
 62         for(int i=1;i<=n;i++)
 63         {
 64             for(int j=1;j<=n;j++)
 65             {
 66                 if(map[i][k]!=maxn&&map[k][j]!=maxn)
 67                 {
 68                     map[i][j]=map[i][j]||(map[i][k]+map[k][j]);
 69                     nmap[i][j]=nmap[i][j]||(nmap[i][k]+nmap[k][j]);
 70                 }
 71                 /*if(map[i][j]>map[i][k]+map[k][j])
 72                 {
 73                     map[i][j]=map[i][k]+map[k][j];
 74                 }
 75                 if(nmap[i][k]!=maxn&&nmap[k][j]!=maxn)
 76                 {
 77                     if(nmap[i][j]>nmap[i][k]+nmap[k][j])
 78                     {
 79                         nmap[i][j]=nmap[i][k]+nmap[k][j];
 80                     }
 81                 }*/
 82             }
 83         }
 84     }
 85     memset(vis,0,sizeof(vis));
 86     for(int i=1;i<=n;i++)
 87     {
 88         if(vis[i]==0)
 89         {
 90             dfs(i);
 91         }
 92     }
 93     for(int i=n;i>=1;i--)
 94     {
 95         if(vis[pass[i]]==1)
 96         {
 97             ndfs(pass[i]);
 98             tot++;
 99         }
100     }
101     printf("%d",tot);
102     return 0;
103 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kosaraju算法详解
Kosaraju算法可以求出有向图中的强连通分量个数,并且对分属于不同强连通分量的点进行标记。它的算法描述较为简单: (1) 第一次对图G进行DFS遍历,并在遍历过程中,记录每一个点的退出顺序。以下
attack
2018/04/12
7080
Kosaraju算法详解
图论算法模板整理及思路 不断更新 绝对精品
DFS 1 #include<iostream> 2 #include<queue> 3 #include<cstdio> 4 using namespace std; 5 queue<int>q; 6 int map[1001][1001]; 7 int vis[1001]; 8 int n,m; 9 void bfs(int p) 10 { 11 q.push(p); 12 vis[p]=1; 13 printf("%c-->",char(q.front(
attack
2018/04/12
8340
codevs原创抄袭题 5960 信使
题目描述 Description  •战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。直至所有n个哨所全部接到命令后,送信才算成功。因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他k个哨所有通信联系的话,这个哨所内至少会配备k个信使)。 • 
attack
2018/04/12
1.2K0
2017.9.17校内noip模拟赛解题报告
预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我。。。。。 T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate) Time Limit:1000ms Memory Limit:64MB 题目描述 LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去。 具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后 慢慢享用。 它打算每次将一根长为 k 的巧克力棒折成两段长为 a
attack
2018/04/12
9050
1043 方格取数 2000年NOIP全国联赛提高组
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取
attack
2018/04/13
6960
1043 方格取数  2000年NOIP全国联赛提高组
《图》相关刷题
用户11039529
2024/04/10
800
2596 售货员的难题
2596 售货员的难题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某乡有n个村庄(1<n<=15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。 输入描述 Input Descrip
attack
2018/04/12
5990
2801 LOL-盖伦的蹲草计划
2801 LOL-盖伦的蹲草计划 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 众所周知,LOL这款伟大的游戏,有个叫盖伦的英雄。他的伟大之处在于他特别喜欢蹲草丛阴人(XL:蹲草阴人也算英雄?!CZQ:没办法,个个都是这么玩的)。某日,德玛西亚与诺克萨斯之间又发生了一场战斗,嘉文四世希望盖伦能带领一支K人的德玛西亚军队出战。 战斗发生在召唤师峡谷。整个召唤师峡谷被分割成M行N列的一个矩阵,矩阵中有空地和几片草丛。这几片草丛中
attack
2018/04/13
8650
2801 LOL-盖伦的蹲草计划
SDUT 2021 Winter Individual Contest – C
有n个超市,有k条信息(i,s),表示物品s在编号为i的超市可以买到。有m个物品要买,给出m件物品的名称,要求按输入的顺序购买所有物品,且访问的超市的编号必须是非严格递增的,若找不到这样的方案输出impossible,若有多种方案输出ambiguous,否则输出unique。
Here_SDUT
2022/06/29
3110
2017.7.21夏令营清北学堂解题报告
预计分数: 60+30+0=90=划水 实际分数: 90+30+20=140=rank5=雷蛇鼠标 一句话总结:今天该买彩票! T1: 题目描述 从前有一个?行?列的网格。 现在有?种颜色,第?种
attack
2018/04/12
7620
ZR18提高5解题报告
设$f[i][j]$表示前$i$个位置,前缀和为$j$的方案数,转移的时候该位置放了什么,以及该位置之前的和是多少。
attack
2018/09/30
3270
ZR18提高5解题报告
最优布线问题
【问题描述】   学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。     当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。   现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。 【输入格式】   输入文件wire.i
attack
2018/04/12
8740
数据结构之图论(续)
在一个无向图G中,若将某个节点v去除之后后G所包含的连通域增多,则v称作切割节点(cut vertex或关节点(articulation point)。如果一个图不含任何关节点则称之为双连通图,最典型的就是完全图。任一无向图都可视作由若干个极大的双连 通子图组合而成,这样的每一子图都称作原图的一个双连通域(bi-connected component)。例如下图中的节点3和5就是关节点。
短短的路走走停停
2020/03/20
6800
POJ 3020 Antenna Placement
Description The Global Aerial Research Centre has been allotted the task of building the fifth generation of mobile phone nets in Sweden. The most striking reason why they got the job, is their discovery of a new, highly noise resistant, antenna. It is ca
attack
2018/04/11
5700
POJ 3020 Antenna Placement
牛客小白月赛22 A~~J
A.链接:https://ac.nowcoder.com/acm/contest/4462/A 来源:牛客网
杨鹏伟
2020/09/11
3890
HDU 1330 Nearest Common Ancestors(求两个点的近期公共祖先)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115481.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
3920
1008 选数 2002年NOIP全国联赛普及组
1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:     3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=3
attack
2018/04/13
5710
185. [USACO Oct08] 挖水井
185. [USACO Oct08] 挖水井 ★★   输入文件:water.in   输出文件:water.out 简单对比 时间限制:1 s   内存限制:128 MB 农夫约翰决定给他的N(1<=N<=300)个牧场浇水,这些牧场被自然的命名为1..N。他可以给一个牧场引入水通过在这个牧场挖一口井或者修一条管道使这个牧场和一个已经有水的牧场连接。 在牧场i挖一口井的花费是w_i(1<=w_i<=100000)。修建一条水管连接牧场i和牧场j的花费是p_ij(1<=p_ij<=100000;p_ij=p
attack
2018/04/12
7290
P1021 邮票面值设计
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。 例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值分别为1分、3分。 输入输出格式
attack
2018/04/13
8450
ICPC Pacific Northwest Regional Contest 2019 C D E M 题解
D 标准签到,因为只能加跟除,所以 A =< B 时就只能执行加法操作 然后 A > B 时,只能对A 不是偶数变偶数然后除 就这样子一直到 A < B。然后执行加法操作。
杨鹏伟
2020/09/10
4010
相关推荐
Kosaraju算法详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验