dreamxr
精诚所至,金石为开!

导航

 

2012年9月10日

摘要: 分析 并查集,需要维护集合内元素与根节点的关系(吃?被吃?同类) 有点类似向量的想法 如果x y属于同一集合 如果x y不属于同一集合 dis[x]=0表示x与根节点同类,1表示根节点吃x,2表示x吃根节点. 1 #include<cstdio> 2 #include<cstring> 3 #define N 50010 4 using namespace std; 5 int root[N],dis[N],n,m; 6 void init(){ 7 for(int i=1;i<=n;i++){ 8 root[i]=i; 9 dis... 阅读全文
posted @ 2012-09-10 22:39 dreamxr 阅读(93) 评论(0) 推荐(0)
 
摘要: 分析 并查集,需要维护集合内元素与根节点的关系(吃?被吃?同类) 有点类似向量的想法 如果x y属于同一集合 如果x y不属于同一集合 dis[x]=0表示x与根节点同类,1表示根节点吃x,2表示x吃根节点. 1 #include 2 #include 3 #define N 50010 4 using namespace std; 5 in... 阅读全文
posted @ 2012-09-10 22:39 dreamxr 阅读(123) 评论(0) 推荐(0)
 

2012年9月7日

摘要: 题目描述 给定n(n<=1000)个点的横纵坐标,规定如果两个点x坐标或者y坐标相同,则两个点可以互相通达,现在问,至少添加几条线,能使得从任意一点出发都能到达所有的点...分析 dfs实现,建图的时候如果两点的x或y相同,那么在两者之间加一条边...最后dfs一下就行-- 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 #include<cstring> 5 #define N 1010 6 using namespace std; 7 vector<i 阅读全文
posted @ 2012-09-07 19:58 dreamxr 阅读(114) 评论(0) 推荐(0)
 
摘要: 题目描述 给定n(n 2 #include 3 #include 4 #include 5 #define N 1010 6 using namespace std; 7 vectorV[N]; 8 int x[N],y[N]; 9 bool v[N]; 10 int cnt=0; 11 void dfs(int rt){ 12 if(v[rt])return; 13 ... 阅读全文
posted @ 2012-09-07 19:58 dreamxr 阅读(149) 评论(0) 推荐(0)
 

2012年9月4日

摘要: 开始好好学学图论了,以前学过点最小生成树,最短路什么的,不过忘的差不多了.... 准备在这个文章里记录下我做过的最短路问题.....慢慢更新...1.ZOJ 1298http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=298 骨牌结束的时候有两种可能,一种是关键牌最后倒下,一种是普通牌最后倒下. 先求出起点到每个点的最短路,然后找出这些最短路中最大值maxn1,然后考虑普通牌最后倒下的情况,i和j之间的普通牌全部倒下的时间是(dis[i]+dis[j]+edge[i][j])/2,对每条边求一次,找出最大的maxn2,... 阅读全文
posted @ 2012-09-04 16:39 dreamxr 阅读(161) 评论(0) 推荐(0)
 

2012年9月3日

摘要: 题目描述 判定最小生成树是否唯一... 分析 根据Kruskal算法构造最小生成树的思路,我们可知出现不唯一生成树的条件即为有权值相同的边,所以在求出最小生成树后,我们可以删除其中一条有相同权值的边,再次构造生成树,如果此时生成树的权值和原来的相同,那么生成树就不唯一. #include #include #include #include #define N 10010 using na... 阅读全文
posted @ 2012-09-03 07:31 dreamxr 阅读(88) 评论(0) 推荐(0)
 
摘要: 题目描述 判定最小生成树是否唯一...分析 根据Kruskal算法构造最小生成树的思路,我们可知出现不唯一生成树的条件即为有权值相同的边,所以在求出最小生成树后,我们可以删除其中一条有相同权值的边,再次构造生成树,如果此时生成树的权值和原来的相同,那么生成树就不唯一.#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define N 10010using namespace std;struct Edge{ int u,v,len; bool same,d 阅读全文
posted @ 2012-09-03 07:31 dreamxr 阅读(102) 评论(0) 推荐(0)
 

2012年8月30日

摘要: 题目描述 给定一个数n,以及几个数字,求仅包含给定数字的n的最小倍数. 分析 bfs,先将数字升序排序,然后bfs,这样可以保证第一个满足条件的肯定是最小的.求出每次加入的数除以n的余数,如果该数出现过,就不用加入队列了. 因为n #include #include #define N 5010 using namespace std; struct node{ int pre,r... 阅读全文
posted @ 2012-08-30 00:00 dreamxr 阅读(396) 评论(0) 推荐(0)
 
摘要: 题目描述 给定一个数n,以及几个数字,求仅包含给定数字的n的最小倍数.分析 bfs,先将数字升序排序,然后bfs,这样可以保证第一个满足条件的肯定是最小的.求出每次加入的数除以n的余数,如果该数出现过,就不用加入队列了.因为n<5000,所以这个队列最多不会超个4999个元素...#include<cstdio>#include<cstring>#include<algorithm>#define N 5010using namespace std;struct node{ int pre,r,d;//pre前趋,r当前余数,d当前位的数字};bool 阅读全文
posted @ 2012-08-30 00:00 dreamxr 阅读(267) 评论(0) 推荐(0)
 

2012年8月29日

摘要: 分析 利用dfs实现,特殊的是不同的点能搜索的范围是不一样的,只有下个点和当前点能够互相可达,才能去dfs下一个点,每次搜索时记录下能搜到的农田的个数。#include<cstdio>#include<map>#include<cstring>#define N 55using namespace std;char s[N][N];bool v[N][N];int cnt;map<char,int>M;int n,m;int move[4][2]={{0,1},{0,-1},{1,0},{-1,0}};// r,l,down,upbool p[N 阅读全文
posted @ 2012-08-29 23:37 dreamxr 阅读(112) 评论(0) 推荐(0)