割顶:去掉该点后图的连通分量数目增加,则称该点为割顶,下图中D和E是割顶 struct node{ int from,to,nex; }edge[2*M]; int head[N],edgenum; void addedge(int u,int v){ node E={u,v,head[u]}; edge[edgenum]=E; head[u]=ed
转自gx巨巨http://blog.csdn.net/u012350533/article/details/14645881 /*ST算法:基于动态规划求区间最值的算法。分为预处理和查询两部分预处理:定义 F[i][j] 为从 i开始到 i+2^j-1 区间内的最值 , 我们可以讲这段2^j的区间分成两部分长度都为2^(j-1)的相同区间区间1 为 i..
//默认图连通且不存在重边 重边判断:bian[i][j]>1 vectorG[N]; struct node{ int u,v,d; }edge[N];//割边不会超过n条 int edgecut; //初始化0 void PUT(int u,int v,int d){ node E={u,v,d}; edge[edgecut++]=E; } int
支持long long #include typedef long long ll; ll GCD(ll a, ll b) { return b ? GCD(b, a % b) : a; } ll MultiMod(ll a, ll b, ll n) { // a * b % n ll res = 0; MillarRabin a %= n; while (b > 0) {
typedef long long ll; typedef unsigned long long ull; const int MAGIC = 131; long long h[N], base[N]; long long MOD = (long long)1e9 + 7; inline void Hash(char *s) { int l = strlen(s); h[0] = 1;
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/12250267注意字典树的节点应该为 : 单词个数*单词长度 注意Trie结构体函数中的idx 字典树模版1:#define Word_Len 505000#define Sigma_size 95struct Trie{ ll ch[Word_Len][S
已知 a,b (a>=0,b>=0)求一组解 (x,y) 使得 (x,y)满足gcd(a,b) = ax+by注意求出的 x,y 可能为0或负数代码中g = gcd(a,b);LL extend_gcd (LL a , LL b , LL &x , LL &y) { if (b == 0) { x = 1LL; y = 0;
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i
#include #include #include #include #include #include #include using namespace std; #define PR 1e-8 #define N 510 struct TPoint{ double x, y, z; TPoint(){}
#include #include #include using namespace std;const int maxn = 105;int equ, var; // 有equ个方程,var个变元。增广阵行数为equ, 分别为0到equ - 1,列数为var + 1,分别为0到var.int a[maxn][maxn];int x[maxn]; // 解集.bool free_x
找一条哈密顿回路。一个
HDU 5002#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;const int INF = 0x3f3f3f3f;co
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include const int inf = 1e8;const double eps =
//1#define MAXN 720struct HP{ int len,s[MAXN]; HP() { memset(s,0,sizeof(s)); len=1; } HP operator =(const char *num) { len=strlen(num); for(int i=0;i<len;i++) s[i]=num[len-i-1]-'0';
typedef long long ll;const int N = 105; //点的个数const int M = 1005; //边的个数//点标从1-nstruct node { int set[N]; void init(int n) { for (int i = 0; i <= n; i++) set[i] = i; } int find(int x) {
形如hdu 5381:点击打开链接 add(int x, int y)的函数复杂度为 O(|x-y|) del同理 #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include
#include#include#include#include#includeusing namespace std;#define point Pointconst double eps = 1e-8;const double PI = acos(-1.0);double ABS(double x){return x>0?x:-x;}int sgn(double x){
素数线性筛+欧拉函数#define ll int#define N 10000000//prime[0,primenum)ll prime[1000000], primenum;bool Isprime[N+10];//<=Max_Prime的素数void PRIME(ll Max_Prime){ primenum = 0; Isprime[0] = Isprime[1] =
两种缩点的模版
//点标从0-n-1, 开始时先init 复杂度n^3 //对于边(u,v,flow): //g[u][v]+=flow; //g[v][u]+=flow; typedef long long ll; const int N = 305; const ll inf = 1e18; ll g[N][N], w[N]; int a[N], v[N], na[N]; ll mincut(int n) {
bzoj 2245,速度非常神 /************************************************************** Problem: 2245 User: neko13 Language: C++ Result: Accepted Time:560 ms
一维数组数组形式inline int Lowbit(int x){return x&(-x);}void change(int i,int x)//单点更新i点改为x{ while(i<=n) { c[i]+=x; i+=Lowbit(i); }}int sum(int x){//区间求和 [1,x]
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号