题意:N,T,S,E:给你T条边,每条边两端都有编号和权值,问从S走到E允许走N条边,求最短路。
foyld加矩阵快速幂思想。
注意要把边离散
#include
#include
#include
#include
using namespace std; #define M 303 #define inf 0x3fffffff struct node { int a[M][M]; node() { for(int i=0;i
>=1; } printf("%d\n",ans.a[mp[s]][mp[e]]); } int main() { while(~scanf("%d%d%d%d",&n,&t,&s,&e)) { int a,b,c; cnt=0; memset(mp,0,sizeof(mp)); while(t--) { scanf("%d%d%d",&c,&a,&b); if(!mp[a]) mp[a]=++cnt; if(!mp[b]) mp[b]=++cnt; ma.a[mp[a]][mp[b]]=ma.a[mp[b]][mp[a]]=c; } pow(); } return 0; }