01 2012 档案

hdu2473 Junk-Mail Filter 并查集的删除
摘要:本题考查的是并查集的删除.在删除结点的时候要注意这样的问题: 并查集的结构是一棵树,当把某一个结点删去(将其父结点置为自己)时,它的子结点的根就会丢失.因此,在删除某结点的时候,要确定它的所有子结点都已经并到根上了.解决方法: 为每一个结点加一个虚根,这样每个结点都是叶子结点.插入结点时,把它们都并到虚根的集合中.删除结点时,只要把它的父结点置为一个无用的虚根http://blog.csdn.net/a181551981/article/details/6286007#include <iostream> #include <string> using namespac 阅读全文

posted @ 2012-01-25 11:28 windmissing 阅读(166) 评论(0) 推荐(0) 编辑

HDLC协议(高级数据链路控制协议)
摘要:1.特点:1)支持面向连接和面向无连接2)支持点对点和点对多点3)支持半双工和全双工(效率高)4)支持流量控制和差错控制(可靠性高)5)传输的控制与处理分离(灵活)6)不依赖字符编码集7)可透明传输2.帧格式标志 | 地址 | 控制 | 信息 | 校验 | 标志1)标志:1B。 01111110其它数据采用“0比特插入法”连续发送多帧时,可以同时表示一帧结束与另一帧的开始2)地址:>= 1B首bit为0时,下一B是扩展地址3)控制:1B信息帧:传输上层的信息或数据监控帧:差错控制和流量控制无编号帧:交换会话管理和控制信息4)信息:>= 0 B 。监控帧的信息是0B上限由通信结点容量 阅读全文

posted @ 2012-01-22 15:22 windmissing 阅读(937) 评论(0) 推荐(0) 编辑

参数传递的三种方式
摘要:1.按值传递void swap(int a, int b){ int temp = a; a = b; b = temp;}int main(){ int a = 2, b =3; swap(a, b); return 0;}优点:便于阅读缺点:不能改变主函数中的值2.按指针传递void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}int main(){ int a = 2, b =3; swap(&a, &b); return 0;}优点:可以改变主函数的值,传参时不需要大量的复制缺点:不易阅读,容易出错3 阅读全文

posted @ 2012-01-22 14:39 windmissing 阅读(444) 评论(0) 推荐(0) 编辑

输入输出运算符重载总结
摘要:1.输出运算符的重载ostream& operator<<(ostream& s, const A& a){ s<<a.rx<<' '<<a.ry<<endl; return s;}2.输入运算符重载istream& operator>>(istream& s, A& a){ s>>a.rx>>a.ry; return s;}3.根据运算符左边对象的类型判断是流运算符还是移位运算符4.ostream类没有公有的复制构造函数,因此该函数无 阅读全文

posted @ 2012-01-22 13:02 windmissing 阅读(251) 评论(0) 推荐(0) 编辑

HDU3461 Code Lock 并查集应用
摘要:/*这题程序不难,关键想法比较难,以下内容来自别人的空间如果没有区间存在,答案是26^n,每增加一个区间,n-1(因为这个区间可以变成26种状态~).但是要注意的是,比如已经有(1,10)和(1,3)在了,此时再增加(4,10)就没有作用了使用并查集对于[l,r]我们将l,r+1两个点并起,如果新线段的两个点是同一个集合,就不用减了*/#include <iostream>#include "UFS.h"#include <cmath>using namespace std;int mod = 1000000007;int exp(int a, in 阅读全文

posted @ 2012-01-20 09:38 windmissing 阅读(120) 评论(0) 推荐(0) 编辑

HDU1325 Is It A Tree?
摘要:/*不能算是并查集,只是用了路径压缩和树的特点,和1272的区别在于它是有向图,它的父结点是固定的*/#include <iostream>using namespace std;int main(){ int n,m,k=0,s[100005]={0},j=0,i,big; bool f=0; bool flag[100005]={0}; while(cin>>n>>m) { if(m==-1&&n==-1)return 0; if(m==0&&n==0) { k++; int... 阅读全文

posted @ 2012-01-18 19:24 windmissing 阅读(105) 评论(0) 推荐(0) 编辑

HDU1272 小希的迷宫 并查集
摘要:/*并查集的应用,注意点的个数为0的时候,注意输入*/#include <iostream>#include "UFS.h"using namespace std;UFS ufs;bool flag[MAXN]={0}, f;int cnt_e, cnt_v;void init();int main(){ int n,m; init(); while(cin>>n>>m) { if(m==-1&&n==-1)return 0; if(m==0&&n==0) { getchar();getchar(); /* 阅读全文

posted @ 2012-01-18 18:04 windmissing 阅读(96) 评论(0) 推荐(0) 编辑

HDU1829 A Bug's Life 并查集
摘要:/*HDU1829A Bug's Life 并查集的应用这题不是判断是否在同一集合,而是判断是否在不同的集合*/#include <iostream>#include "UFS.h"using namespace std;int oppo[MAXN];//记录系第一个BUG的异性所在的集合的编号int main(){ int t; int n,m,i,j; UFS ufs; scanf("%d",&t); for(j=1;j<=t;j++) { bool f=0; memset(oppo, 0, sizeof(oppo) 阅读全文

posted @ 2012-01-18 15:49 windmissing 阅读(112) 评论(0) 推荐(0) 编辑

记录,待总结10
摘要:1.在一个类中定义了一个新的类型,这个类型只能在该类用使用。新类型称为嵌套类2.endl在执行时,做两件事情:1)输入'\n'2)刷新缓冲区flush()解释:执行换行符\n与执行结束符endl,最大的区别在处理文件上,以文件输出流(ofstream)为例。当流的缓冲区未满时,执行'\n'是不会马上写到文件里。但是执行endl会强行把缓冲区里的内容写入文件中。3.输出数据到文件的步骤:1)包含头文件stream2)建立ofstream对象:ofstream ocout;3)将对象与文件关联:ocout.open("123.txt");4)使用 阅读全文

posted @ 2012-01-18 15:02 windmissing 阅读(97) 评论(0) 推荐(0) 编辑

记录,待总结9
摘要:1.字符数组、字符串与string类的区别例1:int main(){ string s; cin>>s;//输入:dog if(s == "dog") cout<<"狗"<<endl; char ch[10]; cin>>ch;//输入:cat if(ch == "cat") cout<<"猫"<<endl; return 0;}输出:dog //输入狗 //输出cat//输入解释:数组名是该数组第一个元素的内存地址用引号括起来的字符串也代表 阅读全文

posted @ 2012-01-18 14:44 windmissing 阅读(122) 评论(0) 推荐(0) 编辑

函数指针总结
摘要:1.一个函数的指针,必须确保该函数被定义且分配了内存,否则将指向空地址,这是指针的大忌。2.函数指针的使用条件:参数、返回值都吻合‘3.函数指针没有++或--的运算4.函数指针作为参数的最好的例子就是回调函数5.函数指针的使用例:void (*p)(int &, int &);void cube(int &x, int &y){ x = x * x * x; y = y * y * y;}void Test(void (*p)(int &, int &), int &a, int &b){ p(a, b); cout<< 阅读全文

posted @ 2012-01-18 14:25 windmissing 阅读(219) 评论(0) 推荐(0) 编辑

记录,待总结8
摘要:1. 传递数组的3种方式1)void func(int a[]);2)void func(int a[5]);3)void func(int *a);例:void func1(int a[], int n);void func2(int a[5], int n);void func3(int *a, int n);int main(){ int a[10], i; for(i = 0; i < 10; i++) a[i] = i + 1; func1(a, 10); func2(a, 10); func3(a, 10); return 0;}void func1(int a[], int 阅读全文

posted @ 2012-01-18 09:54 windmissing 阅读(142) 评论(0) 推荐(0) 编辑

多重继续的二义性总结
摘要:1.多重继续的二义性,根本原因是假如A有Test(),则B和C都有Test(),于是D产生了二义性2.例1:class A{public: void Test(){cout<<"A"<<endl;}};class B{public: void Test(){cout<<"B"<<endl;}};class C : public A, public B{};int main(){ C c; c.Test(); //错误 c.A::Test(); //正确,输出:A c.B::Test(); //正确,输出:B 阅读全文

posted @ 2012-01-17 18:35 windmissing 阅读(158) 评论(0) 推荐(0) 编辑

记录,待总结6
摘要:1.派生类的对象可以赋给基类,反之不行基类的指针可以指向派生类,反之不行基类的引用可以初始化为派生类的对象,反之不行例1:class father{};class son:public father{};int main(){ father f; son s; f = s;//正确 s = f;//错误 father *pf = new son;//正确 son *ps = new father;//错误 father &rf = s;//正确 father &rs = f;//错误 return 0;}2.构造派生类对象时,先执行基类的构造函数,再执行子类的构造函数,析构反之 阅读全文

posted @ 2012-01-17 15:17 windmissing 阅读(96) 评论(0) 推荐(0) 编辑

记录,待总结5
摘要:1.在某些特殊的情况下,赋值运算符必须先释放一些旧值,然后才能根据新值的类型分配新的数据。此时,自复制会出错2.operator关键字配合要转换的类型,构成了转换运算符的重载函数。该函数没有返回值,但可以在函数中返回一个转换后的值例1:待举例。3.两个很重要的例子例2:class A{public: A(){cout<<"construct "<<this<<endl;} A(const A& a){cout<<"copy "<<this<<endl;} ~A(){cout& 阅读全文

posted @ 2012-01-17 14:22 windmissing 阅读(124) 评论(0) 推荐(0) 编辑

记录,待总结4
摘要:1.delete运算符只能删除堆中的空间,删除栈中的空间会导致出错例1:int main(){ A a; A *p = new A; A *q = &a; delete p;//正确,因为p指向堆中的未命名空间 delete q;//错误,因为q指向栈中的空间 return 0;}2.关于强制类型转换例2:class A{ int x;public: A(int i):x(i){cout<<"construct "<<this<<endl;} A(const A& a){x = a.x;cout<<" 阅读全文

posted @ 2012-01-17 14:17 windmissing 阅读(101) 评论(0) 推荐(0) 编辑

函数返回值总结
摘要:例1:class A{ int x;public: A(int i):x(i){} int get(){return x;}};A& func(){ A a(23); return a;}int main(){ A &r = func(); cout<<r.get()<<endl; return 0;}输出:1245000解释:r被初始化为返回值的别名。由于是按引用返回,返回值就是a的别名。因此,r就是a的别名。a是一个局部变量,func()结束后,a消失了。r成了一个空的引用。因此,输出的是上个随机值。例2:class A{ int x;public: 阅读全文

posted @ 2012-01-17 14:07 windmissing 阅读(318) 评论(0) 推荐(0) 编辑

指针与引用的混合使用总结
摘要:1.指针是间接访问,因为要用*来读取地址处的数据。将指针作为函数的接收参数是间接引用的方式引用是直接访问,因为引用是别名,不用任何符号就可以直接读取该对象的数据。将别名作为函数的接收参数是直接引用2.指针引用是否可以为空可以不可以是否可以初始化可以可以是否可以赋值可以不可以是否可以访问堆可以不可以不否可以改变对象可以改变指向的对象,可以改变对象的值不可以改变引用的对象,可以改变对象的值3.例1:int &r = new int; //错误,不可以直接引用来指向堆中空间4.例2:int *p = new int; int &r = *p; //正确,r是通过指针p读取到的未命名i 阅读全文

posted @ 2012-01-16 10:39 windmissing 阅读(599) 评论(0) 推荐(1) 编辑

引用总结
摘要:1.引用就是别名,如int &rnum = num;例1:int main(){ int a; int &ra = a; ra = 999; cout<<"a:"<<a<<endl; a = 0; cout<<"ra:"<<ra<<endl; cout<<&a<<' '<<&ra<<endl; return 0;}输出:a:999 //改变ra会导致a做同样的改变ra:0 //改变a会导致 阅读全文

posted @ 2012-01-14 19:33 windmissing 阅读(123) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示