【POJ 1125】Stockbroker Grapevine
2016-02-24 14:27
501 查看
【POJ 1125】Stockbroker Grapevine
最短路 只是这题数据非常水。
。
主要想大牛们试试南阳OJ同题 链接例如以下:
http://acm.nyist.net/JudgeOnline/talking.php?pid=426&page=2
数据增大非常多 用到非常多东西才干过 (弱没过,。。
这题就是求最短路寻找全部通路中最大权的最小值外加考验英语水平……
Floyd 208K 0MS 1162B
Dijkstra 168K 0MS 1491B
SPFA 180K 0MS 1668B
最短路 只是这题数据非常水。
。
主要想大牛们试试南阳OJ同题 链接例如以下:
http://acm.nyist.net/JudgeOnline/talking.php?pid=426&page=2
数据增大非常多 用到非常多东西才干过 (弱没过,。。
这题就是求最短路寻找全部通路中最大权的最小值外加考验英语水平……
Floyd 208K 0MS 1162B
#include using namespace std; int dis[111][111],n; void Floyd() { int i,j,k,tmax,mmax,f; for(k = 1; k <= n; ++k) for(i = 1; i <= n; ++i) for(j = 1; j <= n; ++j) if(dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[i][k] + dis[k][j]; mmax = INF; for(i = 1; i <= n; ++i) { f = 1; tmax = 0; for(j = 1; j <= n; ++j) { if(i == j) continue; if(dis[i][j] == INF) f = 0; tmax = max(tmax,dis[i][j]); } if(f && tmax < mmax) { k = i; mmax = tmax; } } if(mmax != INF) printf("%d %d\n",k,mmax); else puts("disjoint"); } int main() { int i,k,v; while(~scanf("%d",&n) && n) { memset(dis,INF,sizeof(dis)); for(i = 1; i <= n; ++i) { scanf("%d",&k); while(k--) { scanf("%d",&v); scanf("%d",&dis[i][v]); } } Floyd(); } return 0; }
Dijkstra 168K 0MS 1491B
#include using namespace std; typedef struct Edge { int v,w,next; }Edge; Edge eg[11111]; int head[111],dis[111],n,tp; bool vis[111]; int Dijkstra(int u) { memset(dis,INF,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[u] = 0; int m,p,i,j; for(i = 1; i <= n; ++i) { p = -1; m = INF; for(j = 1; j <= n; ++j) { if(!vis[j] && dis[j] < m) { p = j; m = dis[j]; } } if(i == n || p == -1) break; vis[p] = 1; for(j = head[p]; j != -1; j = eg[j].next) { if(!vis[eg[j].v] && dis[eg[j].v] > dis[p] + eg[j].w) dis[eg[j].v] = dis[p] + eg[j].w; } } if(p == -1) return INF; return dis[p]; } int main() { int i,k,m,t; while(~scanf("%d",&n) && n) { m = INF; tp = 0; memset(head,-1,sizeof(head)); for(i = 1; i <= n; ++i) { scanf("%d",&k); while(k--) { scanf("%d %d",&eg[tp].v,&eg[tp].w); eg[tp].next = head[i]; head[i] = tp++; } } k = 0; for(i = 1; i <= n; ++i) { t = Dijkstra(i); if(t < m) { k = i; m = t; } } if(k) printf("%d %d\n",k,m); else puts("disjoint"); } return 0; }
SPFA 180K 0MS 1668B
#include using namespace std; typedef struct Edge { int v,w,next; }Edge; Edge eg[11111]; int head[111],dis[111],n,tp; bool vis[111]; int SPFA(int u) { memset(dis,INF,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[u] = 0; queue <int> q; q.push(u); int v,w,i,p,m; while(!q.empty()) { p = q.front(); q.pop(); vis[u] = 0; for(i = head[p]; i != -1; i = eg[i].next) { v = eg[i].v; w = eg[i].w; if(dis[v] > dis[p] + w) { dis[v] = dis[p] + w; if(!vis[v]) { vis[v] = 1; q.push(v); } } } } m = 0; for(i = 1; i <= n; ++i) { if(i == u) continue; if(dis[i] == INF) return INF; m = max(m,dis[i]); } return m; } int main() { int i,k,m,t; while(~scanf("%d",&n) && n) { m = INF; tp = 0; memset(head,-1,sizeof(head)); for(i = 1; i <= n; ++i) { scanf("%d",&k); while(k--) { scanf("%d %d",&eg[tp].v,&eg[tp].w); eg[tp].next = head[i]; head[i] = tp++; } } k = 0; for(i = 1; i <= n; ++i) { t = SPFA(i); if(t < m) { k = i; m = t; } } if(k) printf("%d %d\n",k,m); else puts("disjoint"); } return 0; }
相关文章推荐
- BZOJ1026 [SCOI2009] windy数
- C#程序结构
- iOS开发,Xcode7升级以后插件无法使用及其不小心点击Skipbundle解决办法
- javaScript实现trim()的方法
- ios和Android的远程调试(Remote Debugging)
- 微服务实战之容器和微服务 — 完美的一对
- 证书失效
- 微信h5一键关注的代码
- Activity之间传递数据
- hibernate中Inverse和Cascade的比较
- AIX如何查看cpu个数
- 安卓中嵌套fragment界面第二次打开应用崩溃问题
- Jsp学习
- Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析
- Python之模块介绍
- PHP字符串函数(1)
- bzoj3209 花神的数论题
- CentOS下防火墙的基本操作命令
- Oracle User Calls 和 Executions 两个概念的区别
- mybatis配置文件