8-12-COMPETITION
A.
代码:
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.
代码:
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
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
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.