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......

你可能感兴趣的:(com)