hdoj 1869 六度分离【最短路径求两两边之间最长边】
六度分离
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5443 Accepted Submission(s): 2208
Lele对这个理论相当有兴趣,于是,他在HDU里对N个人展开了调查。他已经得到了他们之间的相识关系,现在就请你帮他验证一下“六度分离”是否成立吧。
对于每组测试,第一行包含两个整数N,M(0<N<100,0<M<200),分别代表HDU里的人数(这些人分别编成0~N-1号),以及他们之间的关系。
接下来有M行,每行两个整数A,B(0<=A,B<N)表示HDU里编号为A和编号B的人互相认识。
除了这M组关系,其他任意两人之间均不相识。
- #include<stdio.h>
- #include<string.h>
- #define MAX 1000
- #define INF 0x3f3f3f
- int map[MAX][MAX],vis[MAX];
- int low[MAX];
- int n,m;
- int ok;
- void prime(int y,int x)
- {
- int i,j,next;
- int min,mincost=0;
- memset(vis,0,sizeof(vis));
- for(i=0;i<n;i++)
- {
- low[i]=map[y][i];
- }
- vis[y]=1;
- for(i=0;i<n-1;i++)
- {
- min=INF;
- for(j=0;j<n;j++)
- {
- if(!vis[j]&&min>low[j])
- {
- min=low[j];
- next=j;
- }
- }
- vis[next]=1;
- for(j=0;j<n;j++)
- {
- if(!vis[j]&&low[j]>map[next][j]+low[next])
- low[j]=map[next][j]+low[next];
- }
- }
- if(low[x]==INF||low[x]-1>6)
- {
- ok=0;
- printf("No\n");
- }
- }
- int main()
- {
- int j,i,s,t,l;
- int a,b;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- {
- if(i==j)
- map[i][j]=map[j][i]=0;
- else
- map[i][j]=INF;
- }
- }
- for(i=0;i<m;i++)
- {
- scanf("%d%d",&a,&b);
- map[a][b]=map[b][a]=1;
- }
- ok=1;
- for(j=0;j<n;j++)
- {
- for(i=0;i<n;i++)
- {
- prime(j,i);
- if(ok==0)
- break;
- }
- if(ok==0)
- break;
- }
- if(ok)
- printf("Yes\n");
- }
- return 0;
- }
spfa:
- #include<stdio.h>
- #include<string.h>
- #include<queue>
- #define MAX 2000
- #define INF 0x3f3f3f
- using namespace std;
- int n,m,ans;
- int beg,en;
- int dis[MAX],vis[MAX];
- int head[MAX];
- struct node
- {
- int u,v,w;
- int next;
- }edge[MAX];
- void init()
- {
- ans=0;
- memset(head,-1,sizeof(head));
- }
- void add(int u,int v,int w)
- {
- edge[ans].u=u;
- edge[ans].v=v;
- edge[ans].w=w;
- edge[ans].next=head[u];
- head[u]=ans++;
- }
- void getmap()
- {
- int a,b;
- while(m--)
- {
- scanf("%d%d",&a,&b);
- add(a,b,1);
- add(b,a,1);
- }
- }
- void spfa(int sx)
- {
- int i,j;
- queue<int>q;
- memset(vis,0,sizeof(vis));
- for(i=0;i<=n;i++)
- dis[i]=INF;
- vis[sx]=1;
- dis[sx]=0;
- q.push(sx);
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- vis[u]=0;
- for(i=head[u];i!=-1;i=edge[i].next)
- {
- int top=edge[i].v;
- if(dis[top]>dis[u]+edge[i].w)
- {
- dis[top]=dis[u]+edge[i].w;
- if(!vis[top])
- {
- vis[top]=1;
- q.push(top);
- }
- }
- }
- }
- }
- void solve()
- {
- int i,j;
- int ok=0;
- for(i=0;i<n;i++)
- {
- spfa(i);
- for(j=0;j<n;j++)
- {
- if(dis[j]>7)
- {
- ok=1;
- break;
- }
- }
- if(ok)
- break;
- }
- if(ok)
- printf("No\n");
- else
- printf("Yes\n");
- }
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- init();
- getmap();
- solve();
- }
- return 0;
- }
hdoj 1869 六度分离【最短路径求两两边之间最长边】的更多相关文章
- hdoj 1869 六度分离
Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相 ...
- POJ1986(LCA应用:求两结点之间距离)
Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 11304 Accepted: 3985 ...
- 求两个数之间的质数 -----------基于for循环 算法思想
前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...
- Python基础-求两个字符串最长公共前轴
最长公共前缀,输入两个字符串,如果存在公共前缀,求出最长的前缀,如果没有输出no.如“distance”和“discuss”的最长公共前缀是“dis”. s1 = input('请输入第1个字符串-- ...
- 求两个字符串最长子串的LCS算法 C语言实现(简短的实现函数)
/************************************************************************* > File Name: lcs.c > ...
- js求连个数之间的数字
整理出自项目中一个需求,求两个数之间的数字. const week = function(arr,arr2){ let a=parseInt(arr); let b=parseInt(arr2); l ...
- JavaScript求两个数字之间所有数字的和
这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...
- js 求两个日期之间相差天数
//求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne. ...
- PHP 求两个日期之间相差的天数、月数
<?php /** * 求两个日期之间相差的天数 * (针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day ...
随机推荐
- wcf通道Channel
正文 客户端与服务进行交互的过程是通过通道进行交互的.客户端通过调用代理类执行相应的方法,通过通道编码,调用上下文,传输客户端的事务,管理可靠会话,对消息正文的加密,最后要执行的通道是传输通道就像我们 ...
- spring mvc 和mybatis整合 的异常处理
1.自定义异常信息类 通过构造函数来实现异常信息的接收 public class CustomException extends Exception { //异常信息 private String m ...
- thinkphp+mysql+bootstrap
#thinkphp+mysql+bootstrapthinkphp3.2.3,bootstrap V3一个简易的企业cms网站系统,只要将clients的host改为对应的域名即可.thinkphp. ...
- C语言-05内存剖析
1.进制 1. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 ...
- Entity Framework Code First 数据迁移
需要在[工具 --> NuGet 程序包管理器 --> 程序包管理器控制台]中输入三个命令: Enable-Migrations (初次迁移时使用) Add-Migration [为本次迁 ...
- 第 3 章 单例模式【Singleton Pattern】
以下内容出自:24种设计模式介绍与6大设计原则 这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一.独苗的意思,那什么是独一份呢?你的思维是独一份,除 ...
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 ->最大二分匹配)
[题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何一 ...
- *[hackerrank]Tree Covering
https://www.hackerrank.com/contests/illuminati/challenges/tree-covering 这道题先是在上次交流讨论了一下,然后两位百度的朋友先写完 ...
- SPRING IN ACTION 第4版笔记-第二章WIRING BEANS-006-当构造函数有集合时的注入
一.当构造函数有集合时,只能用<CONSTRUCTOR-ARG>,不能用C-NAMESPACE 二. 1. package soundsystem.collections; import ...
- 再探CRC
之前写了CRC16的程序,虽说能用,却不知其所心然,现在要用CRC32,重温一遍,一下就通了.笔记如下 CRC我没记错的话是Cyclic Redundancy Code,Cyclic和Redundan ...