Description
For Their physical fitness program, N (2≤n≤1,000,000) cows has decided to run a relay race using the T (2 ≤T≤100) cow trails throughout the pasture. Each trail connects-different intersections (1≤i1i≤1,000; 1≤i2i≤1,000), each of the which are the termination for a t least and trails. The cows know the lengthi of each trail (1≤lengthi≤1,000), the intersections of the trail connects, and they know th At no, intersections is directly connected by the 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 has more than one cow ). They must position themselves properly so this they can hand off the baton Cow-by-cow and end up at the proper finishing P Lace.
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's the shortest distance from intersection S to int Ersection E that traverses exactly N cow trails.
Sample Input
2 6 6 411 4 4 4 6 6 8 9
Sample Output
10
source
usaco November Gold
surface
A matrix A (I, j) is used to denote the shortest path from I to J through several edges,
Initialize a to the length of the I to J side, not the positive infinity.
For example, a matrix is represented by an n-bar, B-matrix is represented by M-Bar,
Then A * b gets a matrix representing the M + N edges,
The idea of using Floyd is updated.
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<algorithm>
5 #include<cmath>
6 #include<queue>
7 #include<string>
8 #include<map>
9 #define ll long long
10 using namespace std;
11 ll n,m,S,T,l;
12 map<ll,ll>id;
13 struct node{
14 ll a[202][202];
15 friend node operator *(node x,node y)
16 {
17 node z;
18 memset(z.a,0x3f,sizeof(z.a));
19 for(ll k=1;k<=l;k++)
20 for(ll i=1;i<=l;++i)
21 for(ll j=1;j<=l;++j)
22 z.a[i][j]=min(z.a[i][j],x.a[i][k]+y.a[k][j]);
23 return z;
24 }
25 }s,ans;
26 void ksm()
27 {
28 ans=s;
29 n--;
30 while(n)
31 {
32 if(n&1) ans=ans*s;
33 s=s*s;
34 n>>=1;
35 }
36 }
37 int main()
38 {
39 freopen("run.in","r",stdin);
40 freopen("run.out","w",stdout);
41 memset(s.a,0x3f,sizeof(s.a));
42 scanf("%lld%lld%lld%lld",&n,&m,&S,&T);
43 for(ll i=1,x,y,z;i<=m;++i)
44 {
45 scanf("%lld%lld%lld",&z,&x,&y);
46 if(id[x]) x=id[x];
47 else l++,id[x]=l,x=l;
48 if(id[y]) y=id[y];
49 else l++,id[y]=l,y=l;
50 s.a[x][y]=s.a[y][x]=z;
51 }
52 S=id[S];T=id[T];
53 ksm();
54 printf("%lld",ans.a[S][T]);
55 return 0;
56 }
57 /*
58 2 6 6 4
59 11 4 6
60 4 4 8
61 8 4 9
62 6 6 8
63 2 6 9
64 3 8 9
65 10
66 */
View Code
POJ 3613Cow Relays