XMU 1050 Diffuse Secret 【最短路】

1050: Diffuse Secret

Time Limit: 500 MS  Memory Limit: 64 MB
Submit: 10  Solved: 8
[Submit][Status][Web Board]

Description

  A secret is good in one, better in two, ill in three and worse in four. 
  ----Hi, I know a secret, come on I will tell you. But you must promise that you won’t tell it to other guys. 
  ----OK, of course I won‘t.
 
  Do you think they will keep the secret? No no, just like most people, they share their secrets with their own friends. If everybody knows a secret, it will never be secret any more. 
  For some reasons that know to all, TheBeet keep the salaries of employees as secret. But the employees don’t. At the beginning, everyone only knows how much he/she get. Everyday they share every secret they know with their friends (They don’t share the secret that they just heard today). For Example, A and B are good friends, B and C are good friends, A knows the secret a and secret d. B knows the secret b and secret c. C knows the secret e. After they share their secrets, A will know the secret abcd, B will know the secret abcde, C will know the secret bce. Today TheBeet increases every employee’s salary and he wonders when will be known to all employees.

Input

  The input file contains several test cases. 
  Each test case begins with two integers N, M 0 < N <= 100, 0 <= M <= (N * (N – 1)), N is the number of employee and M indicates there are M pairs of friend. 
  The following M lines contain 2 integers each line describing the pair of friends. 
N = 0 and M = 0 indicates the end of input and should not be processed.

Output

  For each test case, for each test case, output “Case #:” on the first line, ‘#‘ is the number of the test case. Then output a single integer as after such days, these secrets will never be secret. If there is one secret that some one will never know, you just output “Secret.” (Without quotes)

Sample Input

5 5
1 2
2 3
3 4
4 5
5 1
3 1
1 2
0 0

Sample Output

Case 1:
2
Case 2:
Secret.

HINT

Source

厦门大学第四届程序设计竞赛 第一次网络预赛 by TheBeet @ btALT

[Submit][Status][Web Board]

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1050

题目大意:

  每个人都有个秘密,他们每一天都会把自己的所有知道的秘密与他朋友分享

  当天得到的秘密不会分享。问所有人都知道所有秘密时是第几天。

题目思路:

  【最短路】

  考虑第i个人的秘密最迟到j,则秘密从i到j的传播为从i到j的最短路。

  那么所有人的秘密都到达最远的人的时间就为答案,即求所有人到所有人的最短路里的最大值。

  用floyd即可。

 1 /****************************************************
 2
 3     Author : Coolxxx
 4     Copyright 2017 by Coolxxx. All rights reserved.
 5     BLOG : http://blog.csdn.net/u010568270
 6
 7 ****************************************************/
 8 #include<bits/stdc++.h>
 9 #pragma comment(linker,"/STACK:1024000000,1024000000")
10 #define abs(a) ((a)>0?(a):(-(a)))
11 #define lowbit(a) (a&(-a))
12 #define sqr(a) ((a)*(a))
13 #define mem(a,b) memset(a,b,sizeof(a))
14 const double EPS=1e-8;
15 const int J=10000;
16 const int MOD=100000007;
17 const int MAX=0x7f7f7f7f;
18 const double PI=3.14159265358979323;
19 const int N=104;
20 using namespace std;
21 typedef long long LL;
22 double anss;
23 LL aans;
24 int cas,cass;
25 int n,m,lll,ans;
26 int e[N][N],f[N][N];
27 void floyd()
28 {
29     int i,j,k;
30     for(k=1;k<=n;k++)
31     {
32         for(i=1;i<=n;i++)
33         {
34             if(i==k)continue;
35             for(j=1;j<=n;j++)
36             {
37                 if(i==j || k==j)continue;
38                 f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
39             }
40         }
41     }
42 }
43 int main()
44 {
45     #ifndef ONLINE_JUDGE
46     freopen("1.txt","r",stdin);
47 //    freopen("2.txt","w",stdout);
48     #endif
49     int i,j,k,l;
50     int x,y,z;
51 //    for(scanf("%d",&cass);cass;cass--)
52 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
53 //    while(~scanf("%s",s))
54     while(~scanf("%d",&n))
55     {
56         scanf("%d",&m);
57         if(!n && !m)break;
58         ans=0;mem(f,0x01);
59         printf("Case %d:\n",++cass);
60         for(i=1;i<=m;i++)
61         {
62             scanf("%d%d",&x,&y);
63             f[x][y]=f[y][x]=e[x][y]=e[y][x]=1;
64         }
65         floyd();
66         for(i=1;i<=n;i++)
67         {
68             for(j=1;j<=n;j++)
69             {
70                 if(i==j)continue;
71                 ans=max(ans,f[i][j]);
72             }
73         }
74         if(ans==0x01010101)puts("Secret.");
75         else printf("%d\n",ans);
76     }
77     return 0;
78 }
79 /*
80 //
81
82 //
83 */

时间: 2024-11-13 04:33:48

XMU 1050 Diffuse Secret 【最短路】的相关文章

【最短路杂题】

最短路问题是图论中的经典问题,求解单源最短路问题可以采用dijkstra算法,时间复杂度O(n^2),使用堆优化后可以达到O(nlogn).在稀疏图中也可用spfa算法,并不比dijkstra算法表现的差.当然如果有负权值回路,dijkstra就只能GG了!求解全图中任意两点的最短路径还可以用floyd算法,时间复杂度O(n^3),虽然复杂度较高,但在需要的时候该算法也可表现的很好.求两点间的最短路径则可以通过深搜或广搜实现,时间复杂度O(m). 当然最短路问题可以有很多变形,比如下面几道题.

HDU 1596 find the safest road (最短路)

find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6973    Accepted Submission(s): 2469 Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1

codeforces 144D Missile Silos(最短路)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Missile Silos A country called Berland consists of n cities, numbered with integer numbers from 1 to n. Some of them are connected by bidirectional roads. Each road has some length. There is

POJ--1062--昂贵的聘礼【dijkstra_heap+枚举】最短路

链接:http://poj.org/problem?id=1062 题意不说了,中文的 "但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样." 这句话一开始没懂,看discuss里说的之后才明白,实际上你能交易的等级范围为 l[i]~l[i]+m,或者l[i]-m~l[i],其中l[i]是第i个人的等级,m是等级差距限制. 这道题建图,如果对于第 i 个人来说,j 可以通过物品 + t 来交易第 i 个人的物品,则在他们之间

训练指南 UVA - 10917(最短路Dijkstra + 基础DP)

layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: true mathjax: true tags: - 最短路 - 基础DP - Dijkstra - 图论 - 训练指南 Walk Through the Forest UVA - 10917 题意 Jimmy打算每天沿着一条不同的路走,而且,他只能沿着满足如下条件的道路(A,B):存在一条从B出发回家的路径,比

游戏:最短路,拆点

把问题抽象成图论应该不难(也许都不用抽象?),但是怎么建边怎么跑就千差万别了. 首先应该注意到的一点是坐标的范围是0-500,也就是501*501个位置,所以数组/队列不要开小. 另外题目给出的莉露露没说位置不能重复,所以每个点可能不止入队一次,仍然要注意数组大小. 刚开始一直在想复杂度与n挂钩的算法,但是它挂了. 可以发现,n与x*y的差距并不打,所以如果正解复杂度可接受n的话那么拿xy作为复杂度应该没有问题. 先大概讲一下考场上的暴力(80分,因为上面说的锅,把数组开大是88分): 考虑每个

微信企业号/企业微信的corpid和secret?

如果要进行微信企业号和企业微信的开发,首先必须知道对应的corpid和secret,因为很多API调用都必须使用这两个参数.典型的API如获取AccessToken的API.下面介绍在哪里查看微信企业号和企业微信的corpid和secret. 一.微信企业号: 1.corpid信息: 点击左侧菜单[设置],点击[企业号信息],下面就可以看到corpid信息了,每个企业号只有一个corpid. 2.secret信息:微信企业号的secret可以有多个,一个消息管理组有一个secret. 点击左侧菜

hdu3461Marriage Match IV 最短路+最大流

//给一个图.给定起点和终点,仅仅能走图上的最短路 //问最多有多少种走的方法.每条路仅仅能走一次 //仅仅要将在最短路上的全部边的权值改为1.求一个最大流即可 #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> using namespace std ; const int inf = 0x3f3f3f3f ; const

UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据. 每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤1000