HDU 2063
求一个二分图的最大匹配。
完全的裸题。贴代码。
#include#include #include #include #include using namespace std; vector G[1005]; bool check[1005]; int mac[1005]; int n; void add_edge(int from,int to) { G[from].push_back(to); G[to].push_back(from); } bool dfs(int u) { for(int i=0;i
HDU 2444判断该图是否为二分图,如果是二分图就求该图的最大匹配。
判断是否为二分图是我用了一个DFS 也不知道还有没有更简单的方法。
#include#include #include #include #include #include #include using namespace std; vector G[205]; bool check[205]; int mac[205]; int re[205]; void add_edge(int from,int to) { G[from].push_back(to); G[to].push_back(from); } bool rdfs(int u,int k) { re[u]=k; bool flag=true; int k1; if(k==1) k1=2; else k1=1; for(int i=0;i
HDU 1281题意:一个棋盘上有一些地方能放“车” 求最多能放多少个,又有多少个点是关键点,关键点――删除这个点能放的“车”会变少。
把行归位X集合 列归为Y集合。每个点就是从X-Y的一条边。
进行二分图匹配。然后枚举边,求出删除这条边之后的最大匹配,如果比之前的少了 就是关键点。
#include#include #include #include #include using namespace std; int mac[205]; bool check[205]; vector G[205]; int z,y; int n; int k[10005][2]; void add_edge(int from,int to) { G[from].push_back(to); G[to].push_back(from); } bool dfs(int u) { for(int i=0;i