1001~1004比较简单,就不给大家题解了,做不出的再好好想想。
1005
View Code
#include <iostream> #include <stdio.h> using namespace std; int parent[10005]; int find(int x){ return x==parent[x] ? x : parent[x]=find(parent[x]); } int main(){ int n,m,a,b; char q[2]; int k=0; while(cin >> n >> m){ printf("Case %d:\n",++k); for(int i=0;i<=n;i++){ parent[i]=i; } for(int i=0;i<m;i++){ scanf("%s",q); scanf("%d%d",&a,&b); if(q[0]=='C'){ if(find(a)!=find(b)) parent[parent[a]]=b; } else{ if(find(a)==find(b)) printf("yes\n"); else printf("no\n"); } } } return 0; }
1006
View Code
#include <iostream> #include <stdio.h> using namespace std; #define inf 100000000 int main(){ int n,m,a,b,c,z=0; int map[105][105]; while(cin >> n >> m){ for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ map[i][j]=inf; } map[i][i]=0; } for(int i=0;i<m;i++){ cin >> a >> b >> c; if(map[a][b]>c)//处理重边 map[a][b]=c; } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j) continue; if(map[i][j]>map[i][k]+map[k][j]){ map[i][j]=map[i][k]+map[k][j]; } } } } /*for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout << map[i][j] <<" "; } cout << endl; }*/ int maxc=-1; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(maxc<map[i][j] && map[i][j]!=inf) maxc = map[i][j]; } } printf("Case %d:\n",++z); cout << maxc <<endl; } return 0; }
1007
View Code
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int MAXN = 200; int uN,vN; bool g[MAXN][MAXN]; int xM[MAXN],yM[MAXN]; bool chk[MAXN]; int cntp,cntw; bool dfs(int u) { int v; for(v=cntp;v<cntw;v++) { if(g[u][v] && !chk[v]) { chk[v]=true; if(yM[v]==-1 || dfs(yM[v])) { yM[v]=u; xM[u]=v; return true; } } } return false; } int MaxMatch() { int u,ret=0; memset(xM,-1,sizeof(xM)); memset(yM,-1,sizeof(yM)); for(u=0;u<cntp;u++) { if(xM[u]==-1) { memset(chk,false,sizeof(chk)); if(dfs(u)) ret++; } } return ret; } int main() { int n,m; char map[MAXN][MAXN]; int vis[MAXN][MAXN]; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; while(cin >> n >> m) { for(int i=0;i<n;i++) { scanf("%s",map[i]); } cntp=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(map[i][j]=='P') { vis[i][j]=cntp++; } } cntw=cntp; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(map[i][j]=='W'){ vis[i][j]=cntw++; } } } memset(g,0,sizeof(g)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(map[i][j]=='P') { for(int k=0;k<4;k++) { int x=i+dir[k][0]; int y=j+dir[k][1]; if(map[x][y]=='W' && x>=0 && x<n && y>=0 && y<m) { g[vis[i][j]][vis[x][y]]=1; } } } } for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(map[i][j]=='W') { for(int k=0;k<4;k++) { int x=i+dir[k][0]; int y=j+dir[k][1]; if(map[x][y]=='P' && x>=0 && x<n && y>=0 && y<m) { g[vis[i][j]][vis[x][y]]=1; } } } } printf("%d\n",MaxMatch()); } return 0; }
1008
View Code
#include <iostream> #define inf 1000000000 using namespace std; int main(){ int n,m,a,b,c; int map[105][105]; while(cin >> n >> m){ for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ map[i][j]=inf; } map[i][i]=0; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin >> c; if(c<map[i][j]) map[i][j]=c; if(c<map[j][i]) map[j][i]=c; } } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j) continue; if(map[i][j]>map[i][k]+map[k][j]){ map[i][j]=map[i][k]+map[k][j]; } } } } /*for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout << map[i][j] <<" "; } cout << endl; }*/ for(int i=0;i<m;i++){ cin >> a >> b; cout << map[a][b] <<endl; } } return 0; }
1009
View Code
#include <iostream> #include <stdio.h> #include <math.h> using namespace std; #define INF 1000000000 #define MAXN 505 int n,m; double Edge[MAXN][MAXN]; double lowcost[MAXN]; int nearvex[MAXN]; struct Edge{ int u,v; }p[505]; int k=0; void prim(int u){ double maxc=-1; for(int i=1;i<=n;i++){ lowcost[i]=Edge[u][i]; nearvex[i]=u; } nearvex[u]=-1; for(int i=1;i<n;i++){ double min=INF; int v=-1; for(int j=1;j<=n;j++){ if(nearvex[j]!=-1 && lowcost[j]<min){ v=j; min=lowcost[j]; } } if(v!=-1){ if(lowcost[v]>maxc) maxc=lowcost[v]; nearvex[v]=-1; for(int j=1;j<=n;j++){ if(nearvex[j]!=-1 && Edge[v][j]<lowcost[j]){ lowcost[j]=Edge[v][j]; nearvex[j]=v; } } } } printf("Case %d:\n",++k); printf("%.2lf\n",maxc/2.0); } int main(){ int a[505][2]; while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++){ scanf("%d%d",&p[i].u,&p[i].v); } for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ Edge[i][j]=INF; } Edge[i][i]=0; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ Edge[j][i]=Edge[i][j]=sqrt((double)(p[i].u-p[j].u)*(double)(p[i].u-p[j].u)+(double)(p[i].v-p[j].v)*(double)(p[i].v-p[j].v)); } } prim(1); } return 0; }
1010
View Code
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main(){ int n; long long a; double sum; char s[5000]; while(cin >> n){ sum=0; for(int i=0;i<n;i++){ cin >> a; sum += a; } sum/=6.0; sprintf(s,"%.2lf",sum); //cout << s <<endl; int len=strlen(s); if(s[len-1]!='0') cout << s[len-1]; for(int i=len-2;i>=0;i--){ cout << s[i] ; } cout <<endl; } return 0; }