摘要: 简单的。。。一遍。。。#include<stdio.h>#define N 30000+5int n,m,ans;//n个人,m个团体int father[N];int sum[N];int find_f(int x){ if(father[x]==x) return x; else { father[x]=find_f(father[x]); } return father[x];}void u(int x,int y){ int fx,fy; fx=find_f(x); fy=find_f(y); if(fx==fy) return ; if(sum[fx]>=sum[f 阅读全文
posted @ 2012-07-21 18:48 xxx0624 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 匈牙利算法。。。我套模版。。。。还是不理解。。革命尚未成功,同志尚需努力。。。#include<stdio.h>#include<string.h>#define MAX 505bool map[MAX][MAX];//表示男女生是否相连bool vis[MAX];//表示是否访问过y里的男生int link[MAX];//link[j]表示y中的j元素当前与x中连接的元素int m,n;bool searchPath(int u){ int v; for(v=1;v<=n;v++){ if(map[u][v]&&vis[v]==false){ v 阅读全文
posted @ 2012-07-21 16:19 xxx0624 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 不是很理解啊。。。。有点抄袭的成分。。。唉。。。#include<stdio.h>#include<string.h>//#define N 1000#define MAXN 100010int c[MAXN],a[MAXN];int lowbit(int x)//计算lowbit{ return x&(-x);}void add(int i,int val)//将第i个元素更改为val{ while(i<=MAXN) { c[i]+=val; i+=lowbit(i); }}int sum(int i)//求前i项和{ int s=0... 阅读全文
posted @ 2012-07-21 16:16 xxx0624 阅读(415) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#define N 10000000+5int father[N],sum[N];int ans;int find_father(int x){ if(father[x]==x){ return x; } else{ father[x]=find_father(father[x]); } return father[x];}int fmax(int i,int j){ return i>j?i:j;}void u(int x,int y){ int fax,fay; fax=find_father(x); fay=find_father(y) 阅读全文
posted @ 2012-07-21 16:14 xxx0624 阅读(571) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#define MAX 9999999#define N 205int map[N][N];int vis[N];int d[N];int start,end,n,m;//n个村庄,m条路径void init(){ memset(map,MAX,sizeof(map)); memset(vis,0,sizeof(vis)); memset(d,MAX,sizeof(d));}void dijkstra(int s,int e){ int i,k,j,min; vis[s]=1; for(i=0;i&l 阅读全文
posted @ 2012-07-21 16:03 xxx0624 阅读(316) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#define N 100+5#define MAX 9999int map[N][N];int d[N];int n,ans;void prim(){ int i,j,k,min; for(i=1;i<=n;i++) d[i]=map[1][i]; ans+=d[1]; d[1]=0;//进入最小生成树 for(i=1;i<=n;i++){ min=MAX; for(j=1;j<=n;j++){ if(min>d[j]&&d[j]!=0){ k=j; min= 阅读全文
posted @ 2012-07-21 16:00 xxx0624 阅读(392) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>int fmax(int i,int j){ return i>j?i:j;}int main(){ int s1,s2,s3,s4,s5,s6; int sum,tp,tp2; while(scanf("%d%d%d%d%d%d",&s1,&s2,&s3,&s4,&s5,&s6),s1+s2+s3+s4+s5+s6){ sum=0; sum+=s6;//6*6的箱子; //s6=0; sum+=s5;//5*5的箱子,剩下的用1*1来填充 //s5=0; s1=fmax(0 阅读全文
posted @ 2012-07-21 12:44 xxx0624 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 详见(http://www.darkswordzone.com/?p=749)对于一个正整数n的划分,就是把n表示成一系列正整数的和,划分与次序无关。如一个正整数5,可以划分为:[5][4,1][3,2] [3,1,1][2,2,1] [2,1,1,1][1,1,1,1,1]将一个正整数n划分,共有多少种划分方式?上面的例子第一行,所有加数不超过5;第二行,所有加数不超过4;。。。。。。。第五行,所有加数不超过1.定义int fun(int n,int m)表示正整数n,所有加数不超过m的划分数目。那么1,n==1或m==1 时共有1种划分方式。2,n==m时 fun(n,m)=fun(n,m 阅读全文
posted @ 2012-07-21 10:23 xxx0624 阅读(848) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#define N 100000+5int step,mod,seed;int flag;int f[N];int main(){ int i,j,k; while(scanf("%d%d",&step,&mod)==2){ for(i=0;i<=mod-1;i++) f[i]=0; seed=0; do { seed=(seed+step)%mod; f[seed]=1; }while(seed!=0); flag=0; for(i=0;i<=mod- 阅读全文
posted @ 2012-07-21 10:04 xxx0624 阅读(258) 评论(0) 推荐(0) 编辑