hdu 4460 friend chains spfa 最短路里面的最长路
题意不再赘述。。。
连接http://acm.hdu.edu.cn/showproblem.php?pid=4460
此题直接郁闷致死。。。。
比赛的时候用的是floyd然后直接超时。。。当时闪过spfa的想法,但是觉得如果是一个循环spfa话也会超时。。。
今天试了一下。。。果然超时= =。。。郁闷啊亲。。。然后优化了一下,用一个邻接表去存边。
一开始忽略了一点就是-1的输出。。。
代码。
1 #include <stdio.h> 2 #include <iostream> 3 #define inf 10000 4 #include <map> 5 using namespace std; 6 7 map<string,int>str;//但是王林说用map,觉得无非就是搜两下,没那个必要。。。。过会试一下 8 int n,ans; 9 int dis[1005][1005]; 10 int q[1000005]; 11 struct node 12 { 13 int u[1005]; 14 int utop; 15 }edge[1005]; 16 void init(int n)//边的初始化 17 { 18 int i,j; 19 for(i = 0;i < n;i++) 20 { 21 for(j = i+1;j < n;j++) 22 dis[j][i] = dis[i][j] = inf; 23 dis[i][i] = 0; 24 } 25 } 26 void spfa(int pre) 27 { 28 int i,vis[10005] = {0},f,r; 29 int d[1005]; 30 f = r = 0; 31 q[r++] = pre; 32 vis[pre] = 1; 33 for(i = 0;i < n;i++)//这步不能用dis赋值啊亲,我找了好久。。。发现那样的话第一次就没有入栈 的= =,一边循环直接跳出 34 d[i] = inf; 35 d[pre] = 0; 36 37 while(f<r) 38 { 39 int temp; 40 temp = q[f++]; 41 42 for(i = 0;i < edge[temp].utop;i++) 43 { 44 if(d[edge[temp].u[i]] > dis[temp][edge[temp].u[i]] + d[temp] && dis[temp][edge[temp].u[i]] + d[temp] <= 7) 45 { 46 dis[pre][edge[temp].u[i]] = d[edge[temp].u[i]] = dis[temp][edge[temp].u[i]] + d[temp]; 47 48 if(!vis[edge[temp].u[i]]) 49 { 50 q[r++] = edge[temp].u[i]; 51 vis[edge[temp].u[i]] = 1; 52 } 53 } 54 } 55 } 56 } 57 int main() 58 { 59 int i,j; 60 string s,s1,s2; 61 int m; 62 while(scanf("%d",&n)&&n) 63 { 64 ans = -1; 65 int hash[1005] = {0}; 66 str.clear(); 67 for(i = 0;i < n;i++) 68 { 69 cin>>s; 70 str[s] = i; 71 } 72 init(n); 73 scanf("%d",&m); 74 while(m--) 75 { 76 cin>>s1>>s2;; 77 int a,b; 78 a = str[s1]; 79 b = str[s2]; 80 if(hash[a] == 0)//用一个hash 来看是否访问过,对邻接表进行初始化 81 hash[a] = 1,edge[a].utop = 0; 82 if(hash[b] == 0) 83 hash[b] = 1,edge[b].utop = 0; 84 edge[a].u[edge[a].utop++] = b; 85 edge[b].u[edge[b].utop++] = a; 86 dis[a][b] = dis[b][a] = 1; 87 } 88 89 for(i = 0;i < n;i++)//遍历 90 spfa(i); 91 for(i = 0;i < n;i++) 92 { 93 for(j = i+1;j < n;j++)//减少时间 94 if(ans < dis[i][j]) 95 ans = dis[i][j]; 96 } 97 if(ans > 7)//如果有大于7的话说明有连接不上的。其实就是ans初值inf 98 puts("-1"); 99 else 100 printf("%d\n",ans); 101 } 102 }
转载于:https://www.cnblogs.com/0803yijia/archive/2012/11/08/2761693.html
hdu 4460 friend chains spfa 最短路里面的最长路相关推荐
- ssl1762-工厂的烦恼【图论,最短路变形(最长路)】
题目 一个有向图,求它的最长路. 输入 5 5 1 2 2 2 4 9 1 3 7 3 4 1 4 5 6 输出 17 解题思路 就是最短路的算法进行一些更改.不过注意加判断 if (a[i][k] ...
- 【图论】C059_AW_GF和猫咪的玩具 分糖果(floyd求最短路中的最长路 | 最后一个小朋友吃完的时间)
一.GF和猫咪的玩具 GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1-n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同. GF左手拿起金属环L,猫咪右手(或者说:爪 ...
- HDU 4460 Friend Chains(map + spfa)
Friend Chains Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- HDU 4562 守护雅典娜(DAG上的最长路)
理解错题意了...写的很麻烦,而且900+卡过... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstr ...
- *【HDU - 6201】transaction transaction transaction(树形dp 或 spfa最长路 或 网络流)
题干: 题目大意: 给出一棵n个顶点的树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过所需要的花费.现在需要你在树上选择两个点,一个作为买入商品的点,一个作为卖出商品 ...
- P1807 最长路 (SPFA写法)
题目描述 设 G 为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到 n,请设计算法,计算图 G 中 1,n 间的最长路径. 输入格式 输入的第一行有两个整数,分别代表图的点数 n 和边数 ...
- 【SPFA】最长路(洛谷)
最长路 题目 设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j.设w(i,j)为边的长度,请设计算法,计算图G中<1,n>间的最长路径. 输入 ...
- hdu 1224 最长路
开始用dijkstra直接求,发现不行,算法问题(1-2,(30),2-4(20),1--3(10),3--4(100)最后一个点无法更新,导致错误),后用取负,加大数法也没过. 现在(寒假了):求负 ...
- POJ3160强连通+spfa最长路(不错)
题意: 给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值? 思路: ...
最新文章
- 世界上最好的光刻机为什么来自荷兰?【物联网智商精选】
- cisco与h3c的console、vty配置比较
- java 大纲,Java学科学习大纲
- 极兔收购百世快递,谁是赢家?
- 设置最小值与最大值 css,一文学会使用 CSS 中的 min(), max(), clamp() 以及它们的使用场景...
- 重新封装一个iptables防止规则重复
- C语言和C++的区别
- python离线安装依赖包_python离线安装外部依赖包的实现
- scala写入mysql_Scala:读写文件
- 第十章--聚类分析 第5组 小组作业
- [宋史学习] 赵光义篡改历史
- 关于免费域名和空间搭建个人网站——服务器篇
- ubuntu20.04不能切换输入法
- 揭秘沃尔玛、腾讯、京东、浙商银行的供应链管理方案
- day4. jetson nx 确认 SPI 时钟
- Flask之解读app.py文件
- mysql表date类型长度_mysql中数据类型的长度解释
- 要求实现符号函数sign(x)。
- Numpy中reshape函数、reshape(1,-1)的含义(浅显易懂,源码实例)
- Android studio编译错误
热门文章
- 【LC3开源峰会网络技术系列之三】基于JStorm的网络分析平台 1
- 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建
- 《中国制造业走向2025》从构建新价值网络开始
- 使用OpenGL一年后
- bug4 导入新工程时报 Target runtime com.genuitec.runtime.generic.jee60 is not defined
- 计数排序,基数排序,桶排序
- 对象不支持“handleError”属性或方法 ajaxfileupload.js
- sqlserver创建存储过程、函数、
- .net通过获取客户端IP地址反查出用户的计算机名
- 前端差异化项目合并打包