摘要:
题目:http://poj.org/problem?id=2513这个题的题意很好懂,感觉很简单,然后交了之后wa后来意识到是自己的思路不正确,其实就是欧拉回路的问题用到了trie树+并查集+欧拉代码:View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define max 500010 5 using namespace std; 6 struct node 7 { 8 int num; 9 int flag; 10 node *next[26]; 1... 阅读全文
摘要:
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?#include <iostream>#include <algorithm>#include <vector>usingnamespacestd;classpriority_queue{private:vector<int& 阅读全文
摘要:
题目:http://poj.org/problem?id=3349这道题太纠结了,卡了一个晚上,一开始题意理解错了,顺时针和逆时针没有看到,还有就是知道用哈希可是不知道怎样设置key的值来处理冲突,后来搜了一下解题报告然后说是取999983,然后就是用哈希链表,用到了指针,总是出错,错误太难找了,好不容易运行OK了,结果TLE,直接被伤,后来在discuss里有人说是用cin会超时,就改成了scanf,试了一下就A了,唉,这个纠结的啊。。。代码:View Code 1 #include <iostream> 2 #include<algorithm> 3 #includ 阅读全文
摘要:
题目:http://poj.org/problem?id=1611并查集问题,rank[]记录与根节点的关系,num[]记录树的节点数View Code 1 #include <iostream> 2 #include<cstdio> 3 4 using namespace std; 5 int set[30010]; 6 int rank[30010]; 7 int num[30010]; 8 int find(int x) 9 {10 if(x!=set[x])11 {12 set[x]=find(set[x]);13 }14 retur... 阅读全文
摘要:
地址:http://www.cppblog.com/Ylemzy/articles/98322.html树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了.. 阅读全文
摘要:
题目:http://poj.org/problem?id=2299一开始敲了一个冒泡,但是一看数据范围很大,会超时,然后想了想也没想出来什么好的方法,搜了一下解题报告,是逆序数的问题,线代学的不好,都忘了,搜了一下,用的是归并,还有一个方法是树状数组,没接触过树状数组,所以有了解了一下树状数组归并:在合并的过程中是将两个相邻并且有序的序列合并成一个有序序列,如以下两个有序序列Seq1:3 4 5Seq2:2 6 8 9合并成一个有序序:Seq:2 3 4 5 6 8 9对于序列seq1中的某个数a[i],序列seq2中的某个数a[j],如果a[i]<a[j],没有逆序数,如果a[i]&g 阅读全文
摘要:
题目:http://poj.org/problem?id=3020这个题主要是构图比较难,处理方法是把城市编号然后如果在上下左右四个方向存在城市的话,那么这两个城市就可以组成一条边,构成的图是一个无向图,DAG图的最小路径覆盖=节点数(n)-最大匹配数;无向图的最小路径覆盖=节点数(n)-最大匹配数/2;代码:View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int map[405][405]; 6 int st[45 阅读全文
摘要:
题目:http://poj.org/problem?id=3041把X作为n1点集,y作为n2点集,x->y建立二分图,最小顶点覆盖。。View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int n,k; 6 int map[505][505]; 7 int vis[505]; 8 int link[505]; 9 int find(int x)10 {11 int i;12 for(i=1;i<=n;i++ 阅读全文
摘要:
题目:http://poj.org/problem?id=1094代码:View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int map[30][30]; 6 int de[30]; 7 int res[30];//存储结果 8 int n,m; 9 int topo()10 {11 int i,j;12 int d[30];13 int num,pos;14 int k=0,t=1;15 for(i=1;i<= 阅读全文
摘要:
题目:http://poj.org/problem?id=3026题意真的很难懂。。。题目大意:一个迷宫,'#'是墙,不可行走,‘ ‘是可行走的,现在题目是要求从s出发把所有的字母(‘A’)连起来的最短路径各个字母的边权用bfs可求:墙不可走,超出矩阵范围不可走,建立任意字母之间最短距离的图最后用prim就可以了注:用getchar会wa,不知道为什么。。。View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define inf 3000 5 us 阅读全文