#include <iostream> #include <cstring> using namespace std; int maxx=0,minn=9999999,cnt; int n,m,c1,c2,man[501],a[501],b[501],c[501][501],r[501]; bool pan[501]; int dfs(int from,int to,int amount,int len) { if(from==to) { if(len<minn) { minn=len; cnt=1; maxx=amount; } else if(len==minn) { cnt++; if(amount>maxx) maxx=amount; } } else { for(int i=0;i<n;i++) { if(c[from][i]&&(!pan[i])) { pan[i]=1; dfs(i,to,amount+man[i],len+c[from][i]); pan[i]=0; } } } } int main() { cin>>n>>m>>c1>>c2; for(int i=0;i<n;i++) { cin>>man[i]; } for(int i=0;i<m;i++) { cin>>a[i]>>b[i]>>r[i]; c[a[i]][b[i]]=r[i]; c[b[i]][a[i]]=r[i]; } pan[c1]=1; dfs(c1,c2,man[c1],0); cout<<cnt<<" "<<maxx; return 0; }
(乙)1003 我要通过!
猜你喜欢
转载自blog.csdn.net/reticent_man/article/details/80726609
今日推荐
周排行