注意路径压缩时的权值合并View Code #include<cstdio>#include<cstring>#include<stdlib.h>const int MAX = 20010;int p[MAX],w[MAX];void init(int n){ for(int i=0;i<=n;i++) { p[i]=i; w[i]=0; }}void unio(int x,int y){ p[x]=y; w[x]=(abs(x-y)%1000);}int find(int x){ if(p[x]==x) return x; ... Read More
posted @ 2011-11-28 23:43 Because Of You Views(738) Comments(0) Diggs(0) Edit
虽然是水题,还是错了一次View Code #include<stdio.h>#include<string.h>int a[110],b[20][20],ans[100];int tmp[100][100];int main(){ int n,m,i,j,k; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=m;i++) { for(j=1;j<=m;j++) ... Read More
posted @ 2011-11-28 23:07 Because Of You Views(231) Comments(0) Diggs(0) Edit
要求输出以n为结尾的一个数列,要求是数列的每一个数分解成的两个数都在数列中,且使得数列最短直接dfs过掉了View Code #include<stdio.h>#include<string.h>int n,dep,vis[110],ans[110];int dfs(int p,int sum){ int i; if(p==dep) { if(sum==n) return 1; return 0; } for(i=0;i<=p;i++) { sum+=ans[i]; if(!vis[sum]&&sum<=n... Read More
posted @ 2011-11-28 23:05 Because Of You Views(350) Comments(0) Diggs(0) Edit