1003 Emergency 25

打印 上一主题 下一主题

主题 1752|帖子 1752|积分 5256

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 

 

  1. #include <cstdio>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. const int maxn = 505;
  6. int G[maxn][maxn],rescueNum[maxn],vis[maxn]={0},dis[maxn],teamNum[maxn]={0},pathNum[maxn]={0};
  7. int n,m,s,e,INF=1000000000;
  8. int findNotVisMin(){
  9.     int minIdx = -1;
  10.     int minDis = INF;
  11.     for(int i = 0; i < n; i++){
  12.         if(vis[i] == 0 && dis[i] < minDis){
  13.             minIdx = i;
  14.             minDis = dis[i];
  15.         }
  16.     }
  17.     return minIdx;
  18. }
  19. int main() {
  20.     scanf("%d%d%d%d", &n, &m, &s, &e);
  21.     int tmp,from,to,weight;
  22.     for(int i = 0; i < n; i++){
  23.         scanf("%d", &tmp);
  24.         rescueNum[i] = tmp;
  25.     }
  26.     fill(G[0], G[0]+maxn*maxn, INF);
  27.     for(int i = 0; i < m; i++){
  28.         scanf("%d%d%d", &from, &to, &weight);
  29.         G[from][to] = G[to][from] = weight;
  30.     }
  31.     fill(dis, dis+maxn, INF);
  32.     dis[s] = 0;
  33.     teamNum[s] = rescueNum[s];
  34.     pathNum[s] = 1;
  35.     for(int i = 0; i < n; i++){
  36.         int min = findNotVisMin();
  37.         if(min == -1) break;
  38.         vis[min] = 1;
  39.         for(int j = 0; j < n; j++){
  40.             if(vis[j] == 0 && G[min][j] != INF){
  41.                 if(dis[min]+G[min][j] < dis[j]){
  42.                     dis[j] = dis[min]+G[min][j];
  43.                     pathNum[j] = pathNum[min];
  44.                     teamNum[j] = teamNum[min] + rescueNum[j];
  45.                 }else if(dis[min]+G[min][j] == dis[j]){
  46.                     pathNum[j] += pathNum[min];
  47.                     if(teamNum[min]+rescueNum[j] > teamNum[j]){
  48.                         teamNum[j] = teamNum[min]+rescueNum[j];
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.     }
  54.     printf("%d %d\n", pathNum[e], teamNum[e]);
  55.     return 0;
  56. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表