poj 3613 Cow Relays
来源:互联网 发布:u盘安装linux centos7 编辑:程序博客网 时间:2024/06/05 08:21
Description
For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race using the T (2 ≤ T ≤ 100) cow trails throughout the pasture.
Each trail connects two different intersections (1 ≤ I1i ≤ 1,000; 1 ≤ I2i ≤ 1,000), each of which is the termination for at least two trails. The cows know the lengthi of each trail (1 ≤ lengthi ≤ 1,000), the two intersections the trail connects, and they know that no two intersections are directly connected by two different trails. The trails form a structure known mathematically as a graph.
To run the relay, the N cows position themselves at various intersections (some intersections might have more than one cow). They must position themselves properly so that they can hand off the baton cow-by-cow and end up at the proper finishing place.
Write a program to help position the cows. Find the shortest path that connects the starting intersection (S) and the ending intersection (E) and traverses exactly N cow trails.
Input
* Line 1: Four space-separated integers: N, T, S, and E
* Lines 2..T+1: Line i+1 describes trail i with three space-separated integers: lengthi , I1i , and I2i
Output
* Line 1: A single integer that is the shortest distance from intersection S to intersection E that traverses exactly N cow trails.
Sample Input
2 6 6 411 4 64 4 88 4 96 6 82 6 93 8 9
Sample Output
10
n次floyd,原来flody也可以像矩阵一样快速幂。具体的可以看论文《矩阵乘法在信息学的应用》
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int inf=(1<<30)-1;int n;int hash[3010];//映射struct matrix{ int ma[210][210]; matrix() { for(int i=0;i<210;i++) for(int j=0;j<210;j++) ma[i][j]=inf; }};matrix floyd(matrix x,matrix y){ matrix ans; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=1;k<=n;k++) ans.ma[i][j]=min(ans.ma[i][j],x.ma[i][k]+y.ma[k][j]); } } return ans;}matrix pow(matrix a,int m){ matrix ans; for(int i=1;i<=n;i++) ans.ma[i][i]=0; while(m) { if(m&1) ans=floyd(ans,a); a=floyd(a,a); m=m>>1; } return ans;}int main(){ int k,t,s,e; while(~scanf("%d%d%d%d",&k,&t,&s,&e)) { int x,y,d; memset(hash,0,sizeof(hash)); n=1; matrix a; for(int i=0;i<t;i++) { scanf("%d%d%d",&d,&x,&y); if(!hash[x]) hash[x]=n++; if(!hash[y]) hash[y]=n++; a.ma[hash[x]][hash[y]]=a.ma[hash[y]][hash[x]]=d; } n=n-1; matrix ans; ans=pow(a,k); printf("%d\n",ans.ma[hash[s]][hash[e]]); } return 0;}
- poj 3613 Cow Relays
- POJ-3613-Cow Relays
- poj 3613 Cow Relays
- poj 3613 Cow Relays
- poj 3613 Cow Relays
- POJ 3613 Cow Relays
- poj 3613 Cow Relays
- POJ 3613 Cow Relays
- POJ-3613-Cow Relays-矩阵
- POJ--3613[Cow Relays] floyd 倍增法
- POJ 3613 Cow Relays [矩阵连乘]
- POJ 3613 Cow Relays floyd + 快速幂
- POJ--3613[Cow Relays] floyd 倍增法
- POJ 3613 Cow Relays Floyd最短路
- POJ 3613 Cow Relays floyd+快速幂
- poj 3613 Cow Relays (floyd快速幂)
- POJ 3613 Cow Relays 倍增Floyd
- Poj 3613 Cow Relays【Floyd+快速幂】
- Hibernate与 MyBatis的比较
- 为推广3D应用,目前尤尼科技计划启动一系列3D打印机进校园活动
- 遍历Map
- Python yield 使用浅析
- Web.xml配置详解之context-param
- poj 3613 Cow Relays
- Aspect Oriented Programming with Spring
- listview item设置间距无效与去掉默认黄色的selector
- ios 用了svn管理代码,项目文件越来越大,远超出实际代码文件大小
- cell的常用属性
- linux shell编程中的特殊符号
- fseek,ftell,ftruncate,fsetpos,fgetpos简介
- 利用RANSAC算法筛选SIFT特征匹配
- activity-alias的使用