8-12-COMPETITION

链接:最短路

A.HDU 2544    最短路

算是最基础的题目了吧.............我采用的是Dijkstra算法.......

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 #define inf 0x3f3f3f3f
 7 int map[105][105],d[105],vis[105],n,m;
 8 
 9 int Dijkstra()
10 {
11     memset(vis,0,sizeof(vis));
12     for(int i=0;i<=n;i++)
13         d[i]=(i==1?0:inf);
14     for(int i=1;i<=n;i++)
15     {
16         int x,minn=inf;
17         for(int j=1;j<=n;j++)
18             if(!vis[j] && d[j]<minn)
19             {
20                 minn=d[j];
21                 x=j;
22             }
23         vis[x]=1;
24         for(int y=1;y<=n;y++)
25             d[y]=min(d[y],map[x][y]+d[x]);
26     }
27     return d[n];
28 }
29 
30 int main()
31 {
32     int i,u,v,w;
33     while(~scanf("%d%d",&n,&m),n,m)
34     {
35         memset(map,inf,sizeof(map));
36         for(i=0;i<m;i++)
37         {
38             scanf("%d%d%d",&u,&v,&w);
39             map[u][v]=map[v][u]=w;
40         }
41         printf("%d\n",Dijkstra());
42     }
43     return 0;
44 }

B.HDU 3790  最短路径问题

......Loading......

C.HDU 3665   Seaside

题意:就是找到海边的最短路~

这道题其实还是很简单的~就是输入麻烦的点.......╮(╯▽╰)╭把输入搞清了就SO EASY~

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int inf=100000000;
 7 int a[205][205],b[205];
 8 
 9 int main()
10 {
11     int u,v,i,j,n,s,t,k,sum,ll,number,maxx;
12     while(~scanf("%d",&n))
13     {
14         for(i=0;i<n;i++)
15             for(j=0;j<n;j++)
16             a[i][j]=inf;
17         for(i=0;i<n;i++)
18             a[i][i]=0;
19         for(i=0;i<n;i++)
20         {
21             scanf("%d%d",&u,&b[i]);  //u代表该镇与几个town相连,b[i]代表该镇是否临海~
22             for(j=0;j<u;j++)
23             {
24                 scanf("%d%d",&number,&ll);     //number代表是哪个镇,ll代表u镇与该镇相连的距离
25                 if(a[i][number]>ll)
26                 a[i][number]=a[number][i]=ll;
27             }
28         }
29         for(i=0;i<n;i++)
30             for(j=0;j<n;j++)
31             for(k=j+1;k<n;k++)
32             if(a[j][k]>a[j][i]+a[i][k])
33         {
34             a[j][k]=a[j][i]+a[i][k];
35             a[k][j]=a[j][k];
36         }
37         maxx=inf;
38         for(i=0;i<n;i++)
39         {
40             if(a[0][i]<maxx && b[i]==1)
41                 maxx=a[0][i];
42         }
43         printf("%d\n",maxx);
44     }
45     return 0;
46 }

//memory:264KB   time:0ms

D.HDU 1869   六度分离

简而言之~是很简单的题~把每个人的关系都弄出来~只要都满足不大于6个人就是YES,反之NO~

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int inf=100000000;
 7 int a[205][205];
 8 
 9 int main()
10 {
11     int u,v,w,i,j,n,m,s,t,k;
12     while(~scanf("%d%d",&n,&m))
13     {
14         for(i=0;i<n;i++)
15             for(j=0;j<n;j++)
16             a[i][j]=inf;
17         for(i=0;i<n;i++)
18             a[i][i]=0;
19         for(i=0;i<m;i++)
20         {
21             scanf("%d%d",&u,&v);
22                 a[u][v]=a[v][u]=1;
23         }
24         for(i=0;i<n;i++)
25             for(j=0;j<n;j++)
26             for(k=j+1;k<n;k++)
27             if(a[j][k]>a[j][i]+a[i][k])
28         {
29             a[j][k]=a[j][i]+a[i][k];
30             a[k][j]=a[j][k];
31         }
32         w=0;
33         for(i=0;i<n;i++)
34             for(j=i;j<n;j++)
35              if(a[i][j]>7)
36                 {w=-1; break;}
37         if(w==-1) printf("No\n");
38         else
39             printf("Yes\n");
40     }
41     return 0;
42 }

//memory:320KB   time:31ms

E.HDU 1874   畅通工程续

是很简单的题~和A极端的像.............但TLE很多次........刚开始百思不得其解........结果后来发现,就是与A题太像了,结果自己就擅自做主把A题的“输入0,0退出”,直接就套到这道题上了.........T T.........让人泪奔的错误啊.......

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int inf=100000000;
 7 int a[205][205];
 8 
 9 int main()
10 {
11     int u,v,w,i,j,n,m,s,t,k;
12     while(~scanf("%d%d",&n,&m))
13     {
14         for(i=0;i<n;i++)
15             for(j=0;j<n;j++)
16             a[i][j]=inf;
17         for(i=0;i<n;i++)
18             a[i][i]=0;
19         for(i=0;i<m;i++)
20         {
21             scanf("%d%d%d",&u,&v,&w);
22             if(a[u][v]>w)
23                 a[u][v]=a[v][u]=w;
24         }
25         for(i=0;i<n;i++)
26             for(j=0;j<n;j++)
27             for(k=j+1;k<n;k++)
28             if(a[j][k]>a[j][i]+a[i][k])
29         {
30             a[j][k]=a[j][i]+a[i][k];
31             a[k][j]=a[j][k];
32         }
33         scanf("%d%d",&s,&t);
34         if(a[s][t]==inf) printf("-1\n");
35         else
36         printf("%d\n",a[s][t]);
37     }
38     return 0;
39 }

//memory:332KB   time:31ms

F.HDU 1317   XYZZY

......Loading......

G.HDU 4360     As long as Binbin loves Sangsang

......Loading......

H.POJ 1847    Tram

......Loading......

I.POJ 1062     昂贵的聘礼

......Loading......

posted @ 2013-08-14 14:26  Teilwall  阅读(184)  评论(0编辑  收藏  举报