POJ-3613-Cow Relays

来源:互联网 发布:谷歌翻译 mac 编辑:程序博客网 时间:2024/06/04 19:24
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;#define INF ((1<<30)-1)int n;struct matrix{    int mat[201][201];    matrix(){        for(int i=0;i<201;i++)            for(int j=0;j<201;j++)mat[i][j]=INF;    }};int f[2001];matrix mul(matrix A,matrix B){    matrix C;    int i,j,k;    for(i=1;i<=n;i++)    {        for(j=1;j<=n;j++)        {            for(k=1;k<=n;k++)            {                C.mat[i][j]=min(C.mat[i][j],A.mat[i][k]+B.mat[k][j]);            }        }    }    return C;}matrix powmul(matrix A,int k){    matrix B;    for(int i=1;i<=n;i++)B.mat[i][i]=0;    while(k)    {        if(k&1)B=mul(B,A);        A=mul(A,A);        k>>=1;    }    return B;}int main(){    matrix A;    int k,t,s,e,a,b,c;    scanf("%d%d%d%d",&k,&t,&s,&e);    int num=1;    while(t--)    {        scanf("%d%d%d",&c,&a,&b);        if(f[a]==0)f[a]=num++;        if(f[b]==0)f[b]=num++;        A.mat[f[a]][f[b]]=A.mat[f[b]][f[a]]=c;    }    n=num-1;    A=powmul(A,k);    cout<<A.mat[f[s]][f[e]]<<endl;    return 0;}

0 0