比这篇新的文章: Codee#6096
比这篇旧的文章: ICON Creater from RGBa array-生成图标文件,支持24位和32位图片

Codee#6095

语言: C++, 标签: 无  2009/09/15发布 6个月前更新
作者: wolftom, 点击123次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
C++语言: Codee#6095
01 #include<cstring>
02 #include<cstdio>
03 #include<iostream>
04 using namespace std;
05
06 int cost[210][210],d[210],a[210];
07 bool vis[210];
08 int n,m,ans;
09 int main()
10 {
11     scanf("%d%d",&n,&m);
12     for (int i=1;i<=n;i++) scanf("%d",&a[i]);
13     memset(cost,0,sizeof(cost));
14     int x,y,c;
15     for (int i=1;i<=m;i++)
16     {
17         scanf("%d%d%d",&x,&y,&c);
18         if (cost[x][y]==0 || cost[x][y]>c)
19             cost[x][y]=c;
20     }
21     int Min,p,temp;
22     ans=0x7FFFFFFF;
23     for (int i=1;i<=n;i++)
24         if (cost[1][i]!=0)
25         {
26             temp=cost[1][i]; cost[1][i]=0;
27             memset(d,127,sizeof(d));
28             memset(vis,false,sizeof(vis));
29             d[i]=0;
30             for (int j=1;j<=n-1;j++)
31             {
32                 Min=0xFFFFFFF; p=0;
33                 for (int k=1;k<=n;k++)
34                     if (!vis[k] && d[k]<Min)
35                     {
36                         Min=d[k]; p=k;
37                     }
38                 if (p==0) break;
39                 vis[p]=true;
40                 for (int k=1;k<=n;k++)
41                     if (cost[p][k]!=0 && !vis[k] && d[k]>d[p]+cost[p][k]+a[k])
42                         d[k]=d[p]+cost[p][k]+a[k];
43             }
44             cost[1][i]=temp;
45             if (ans>cost[1][i]+a[i]+d[1])
46                 ans=cost[1][i]+a[i]+d[1];
47         }
48     if (ans<2100000000) printf("%d\n",ans);
49     else printf("-1\n");
50     return 0;
51 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论