2011年9月26日
摘要: HDU_1879 如果道路已建,就直接应用并查集,如果未建,就把边储存起来。最后再应用一次Kruskal算法求最小生成树即可。#include<stdio.h>#include<string.h>#include<stdlib.h>int p[110],u[10010],v[10010],w[10010],r[10010];int find(int x){ return p[x]==x?x:(p[x]=find(p[x])); }int cmp(const void *_p,const void *_q){ int *p=(int *)_p; int *q= 阅读全文
posted @ 2011-09-26 23:27 Staginner 阅读(299) 评论(0) 推荐(0) 编辑
摘要: HDU_1532 这是一个比较基础的网络流的题目,好长时间没有写过网络流了,一开始把cap[v][u]赋成了-cap[u][v],导致WA了好多次,看来是和最小费用最大流的cost[v][u]=-cost[u][v]搞混了。#include<stdio.h>#include<string.h>int cap[210][210],flow[210][210];int q[210],p[210],a[210];int main(){ int i,j,k,N,M,u,v,front,rear; long long int ans; while(scanf("%d%d 阅读全文
posted @ 2011-09-26 21:25 Staginner 阅读(423) 评论(0) 推荐(1) 编辑
摘要: HDU_2027 直接应用字符串的哈希即可,每成功插入一个单词,计数增加1。#include<stdio.h>#include<string.h>#include<ctype.h>int head[1000003],next[1000];char b[1000],st[1000][100];int hash(char *str){ int seed=31,v=0; while(*str) v=v*seed+*(str++); return (v&0x7FFFFFFF)%1000003;}int insert(int s){ int i,h; h=ha 阅读全文
posted @ 2011-09-26 20:15 Staginner 阅读(462) 评论(0) 推荐(0) 编辑
摘要: UVA_10057 首先对序列进行升序排序,如果N是奇数的话,那么A只能是中间的那个数,如果N是偶数的话,那么A可以是中间两个数所组成的区间里的任意一个整数。#include<stdio.h>#include<string.h>#include<stdlib.h>int a[1000010];int cmp(const void *_p,const void *_q){ int *p=(int *)_p; int *q=(int *)_q; return *p-*q; }int main(){ int i,j,k,N,n1,n2; while(scanf(& 阅读全文
posted @ 2011-09-26 19:54 Staginner 阅读(633) 评论(0) 推荐(0) 编辑
摘要: UVA_11054 这是一个贪心的题目,我们可以假想第i个人总是与第i+1个人来进行交易来满足i的要求,这样每个人就都是与其最近的人进行交易,从而产生了最优解。#include<stdio.h>#include<string.h>#include<stdlib.h>long long int a[100010];int main(){ int i,j,k,n; long long int sum; while(1) { scanf("%d",&n); if(n==0) break; for(i=0;i<n;... 阅读全文
posted @ 2011-09-26 16:13 Staginner 阅读(343) 评论(0) 推荐(0) 编辑