摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=1361题不难 我交了八次。。 刚开始以为还要判断一个国家会不会重复妇女的名字 写的复杂了 一直runtime 看了下别人的代码 知道不用判断 删去了一大部分 之后开始WA 最后找到原因 是因为除国家外 因为不确定名字的字符串数 名字用gets输入开两个数组 一个存国家 一个存数量 有输入重复的国家 就剪掉View Code 1 #include &l 阅读全文
posted @ 2012-07-08 17:02 _雨 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 纠结了好几个小时 不明白哪错了 跟别人的代码仔仔细细的对照才发现题目要求把原来的数据再输出一遍 石化。。选择排序的思想 每次找到最大的那个数将它放在该放的位置输入用字符串 再转化成数字UVA就是麻烦 来来回回的逆转 都转晕了View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<string.h> 4 int n ; 5 void deal(char *s,int *a) 6 { 7 int begin,end,len=strlen(s); 8 n=0; 9 begin=0;10 end 阅读全文
posted @ 2012-07-08 15:14 _雨 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 导弹拦截系统 随时更新dp[i]的值 满足第i个导弹的高度比第j个高的而且dp[i]<dp[j]+1 就更新dp[i]的值View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int n, i, j, dp[10001], h[10001], min; 6 while(scanf("%d", &n)!=EOF) 7 { 8 for(i = 1 ; i <= n ; i++) 9 {10 scanf("%d" , & 阅读全文
posted @ 2012-07-07 23:00 _雨 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 简单并查集 这题WA了20几次 相当无语 写了半小时 找错找了2小时 就因为输入用的字符而不是字符串 真无语 做poj要相当细心啊相当小心啊还有一点注意一下 N是1001 刚开始我直接开的1001将已经修好的距离可达到的电脑合并为一个集合 比较两个节点的根节点是否相同就是View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<math.h> 4 int father[1010], deep[1010]; 5 int find(int u) 6 { 7 if(u!=father[u]) 8 阅读全文
posted @ 2012-07-07 01:52 _雨 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 这题实在是郁闷 检查了几个小时的错误 十几次runtime 居然是没定义成全局变量m[][]存当前最大的公共子序列m[i][j] = m[i-1][j-1] +1 (x[i] = y[i])elsem[i][j] = max(m[i-1][j],m[i][j-1]);View Code 1 #include<stdio.h> 2 #include<string.h> 3 int m[1001][1001]; 4 char c1[1001], c2[1001]; 5 int main() 6 { 7 int i,j, k1, k2; 8 while(scanf(" 阅读全文
posted @ 2012-07-06 21:09 _雨 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 并查集 r[]记录节点到跟节点的距离 num[] 树的节点数View Code 1 #include <stdio.h> 2 int father[30005],r[30005],num[30001]; 3 int find(int x) 4 { 5 if(x!=father[x]) 6 { 7 int t = father[x]; 8 father[x] = find(father[x]); 9 r[x]+=r[t];10 }11 return father[x];12 }13 14 void union1(i... 阅读全文
posted @ 2012-07-06 14:30 _雨 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 与1182一个思路 并查集加偏移量 不过比1182好做一些View Code 1 #include 2 int father[100005], r[100005]; 3 void init(int n) 4 { 5 int i; 6 for(i = 1 ; i <= n ; i++) 7 { 8 r[i] = 0; 9 father[i] = i;10 }11 }12 int find(int x)13 {14 if(x!=father[x])15 {16 int pre = father[x]... 阅读全文
posted @ 2012-07-05 22:32 _雨 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 把两个节点的关系转换为对根节点的关系的比较View Code 1 #include <stdio.h> 2 int father[50001] ,r[50001]; 3 void init(int n) 4 { 5 int i; 6 for(i = 1 ; i <= n ; i++) 7 { 8 father[i] = i; 9 r[i] = 0;10 }11 }12 int find(int x)13 {14 if(x == father[x])15 return father[x];16 else17... 阅读全文
posted @ 2012-07-05 20:51 _雨 阅读(196) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1611题意是找出可能携带病毒的人数 就是把有交集的集合合并在一起 答案就是最后0所在集合的人数并查集的一个主要思想就是合并两个不相交集合 在这个题中 也就是不含重复元素 比如 第一个集合中的1,2 就是把1, 2合并起来作为一个集合 同时把num【】更新一下 就是集合中的元素个数 把每个集合中的第一个数作为根节点 这样集合里的所有元素的祖先就是第一个数x如果两个集合没有交集 比如1,2和10 11 12 13 14 15 这两个集合就不会合并 因为只是集合中的元素合并 1和2合并 10和其它的4个数合并 但是要是有交集1,2和0,1 这两个 阅读全文
posted @ 2012-07-05 14:59 _雨 阅读(274) 评论(3) 推荐(0) 编辑
摘要: 作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://dongxicheng.org/structure/union-find-set/1、 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。2、 基本操作并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为:A. 合并两个不相交集合B. 判断两个元素是否属于同一个集合(1) 合并两个不相交集合(Union(x,y))合并操作很简单:先设置一个数组Father[x],表示 阅读全文
posted @ 2012-07-04 21:53 _雨 阅读(216) 评论(0) 推荐(0) 编辑