題意: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; }