摘要: 最小覆盖等于n-最大匹配.View Code #include<iostream>#include<map>#include<cstring>#include<cstdio>#include<vector>using namespace std;const int maxn=180;vector<int>v[maxn];int vis[maxn],match[maxn];int n,m;void init(){ for(int i=0;i<=n;i++) v[i].clear(); memset(match,-1,s 阅读全文
posted @ 2012-03-07 19:18 静静的等待_93 阅读(98) 评论(0) 推荐(0)
摘要: 二分图View Code #include<iostream>#include<queue>#include<vector>#include<cstring>#include<string>#include<cstdio>#define maxn 501using namespace std;int match[maxn],vis[maxn];string a[maxn],b[maxn];int m,n,t;vector<int>q[maxn];void init(){ memset(match,-1,size 阅读全文
posted @ 2012-03-07 15:03 静静的等待_93 阅读(130) 评论(0) 推荐(0)
摘要: 题目:M指的是将前一个箱子移动到后一个箱子上,C为询问在这个箱子下面的箱子有多少个?这里sum指的是这个并查集中的元素的个数。rank为到根节点的距离(可以压缩更新),p为上一个根节点.View Code #include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;const int maxn=100005;int n,m;int p[maxn],rank[maxn],sum[maxn];void init(){ for(int i=0;i 阅读全文
posted @ 2012-03-06 17:17 静静的等待_93 阅读(128) 评论(0) 推荐(0)
摘要: 题目大意:帮派不是敌人就是朋友,敌人的敌人就是朋友。A为询问 D为操作为敌人。#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;const int maxn=100005;int n,m;int p[maxn],rank[maxn];void init(){ for(int i=0;i<=n;i++) { p[i]=i; rank[i]=0; }}int find(int x){ if(x==p[x]) return x; 阅读全文
posted @ 2012-03-06 16:35 静静的等待_93 阅读(130) 评论(0) 推荐(0)
摘要: 第一道并查集:说明rank指的是从上一个根到当前位置的和。p指的是上一个根。#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;const int maxn=201000;int n,m,ans;int rank[maxn],p[maxn];void init(){ ans=0; for(int i=0;i<=n;i++) { p[i]=i; rank[i]=0; }}int find(int x){ if(p[x]==x.. 阅读全文
posted @ 2012-03-06 15:42 静静的等待_93 阅读(232) 评论(1) 推荐(0)