2012年8月3日
摘要: 并查集的经典两个函数模版:(之前写的模版有错)int set[10000001],c[10000001];void mst(){ for(int i=1;i<10000001;i++) { set[i]=i; c[i]=0; }}int find(int x){ if(x!=set[x]) set[x]=find(set[x]); return set[x];}void memg(int x,int y){ x=find(x); y=find(y); if(x==y) return ;else set[x]=y;} 阅读全文
posted @ 2012-08-03 23:10 xinmenghuairi 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 要注意有特殊情况0 0,只要记录点是否都记录了,连接的边和用到的点的差是1就可以了。代码:View Code 1 #include<iostream> 2 using namespace std; 3 int lu[100001]; 4 int used[100001]; 5 int find(int x) 6 { 7 while(x!=lu[x]) 8 x=lu[x]; 9 return x;10 } 11 12 int memger(int x,int y)13 {14 x=find(x);15 y=find(y);16 if(x==... 阅读全文
posted @ 2012-08-03 23:09 xinmenghuairi 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 这道题用djs算法就可以的。。。起初用FLOYD算法结果超时了。。。用djs时memset函数没用好。。。结果输出都是错的。。定义数组初始最大时要这样定义#define MAX 0x4f4f4f4fint map【1001】【1001】;memset(map,0x4f,sizeof(map));还有就是把终点作为起始点代码:View Code 1 #include<iostream> 2 #define MAX 0x4f4f4f4f 3 using namespace std; 4 int map[1002][1002]; 5 int dis[1002]; 6 int n,m,mu 阅读全文
posted @ 2012-08-03 11:53 xinmenghuairi 阅读(195) 评论(0) 推荐(0) 编辑