摘要:
算法 最小生成树 思路 其实就是一道最小生成树的模板题,我在这里用的是kruskal算法,唯一需要注意的是每加入一条边都要判断s,t是不是在一个集合里面,这样就可以顺利AC了。(排序了) 代码 #include<cstdio> #include<cstring> #include<iostream> 阅读全文
摘要:
算法 最短路+变式 思路 我们仔细思考一下,对于任意一个点,到它的最大拥挤度的最小值肯定是与它相邻的一个点的此值和他们之间的边权值取一个max,然后在所有max中取一个min! 这样我们就可以想到只要把板子里的松弛稍微修改一下,即只需把原本的求和改为取max就ok了! 另,注意此题应构无向图!! 代 阅读全文
摘要:
算法 最小生成树+kruskal 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define N 1005 using namespace std; int 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; struct hh { int x,y,t; }a[200000]; int f[200000],n,m; int cmp(const hh &a,const hh &b){return a.t<b.t;} i 阅读全文
摘要:
算法 并查集+扩展域 思路 扩展域并查集维护三个域:x_self同类,x_enemy天敌,x_eat捕食。 他们之间的关系: 假设有x,y两个动物, 如果题目给定x和y是同类,那么合并x_self,y_self和x_enemy,y_enemy和x_eat和y_eat。 前提条件是:x_self与y_ 阅读全文
摘要:
算法 并查集+带权 思路 链也是树。接到后面等同于合并集。 find int get(int x) { if (x == fa[x]) return x; int root = get(fa[x]); d[x] += d[fa[x]]; return fa[x] = root; } 修改 int m 阅读全文
摘要:
算法 并查集+离散化 思路 离散化 sort(l,l+tot); int start=unique(l,l+tot)-l; for(int i=1;i<=n;++i){ a[i].x=lower_bound(l,l+start,a[i].x)-l; a[i].y=lower_bound(l,l+st 阅读全文
摘要:
算法 二分图+最小独立集 思路 在日字形内两点连边(1),必处于不同色格子(0)。为二分图。要互不相扰,求最大独立集。 核心 最大匹配 bool dfs(int x, int y) { for (int i = 0; i < 8; i++) { int nx = x + dx[i], ny = y 阅读全文
摘要:
算法 二分图+最小点覆盖 思路 详见《进阶指南》 代码 #include <cstdio> #include <vector> #include <cstring> #include <iostream> using namespace std; const int N = 56; int n, m 阅读全文
摘要:
算法 二分图+最小点覆盖 思路 节点 A的模式为左部节点,B的模式为右部节点 边 一个物品的A与B间连边。 2要素 及一条边中必选有一个节点 ,(要么在A加工,要么在B加工) 代码 #include <cstdio> #include <vector> #include <cstring> #inc 阅读全文