随笔分类 - 模板
摘要:1 struct Splay{ 2 int rt,sz; ///根节点,树节点总数 3 int va[N],son[N][2],fa[N];///值,左右儿子,父亲 4 void spin(int t){ ///旋转操作 5 int x=fa[t], f=fa[x], y=son[x][1]==t; 6 son[...
        阅读全文
                
摘要:1 void Solve(LL n){ ///分解质因数保存结果于p 2 p.clear(); 3 for(LL i=2; i*i1) p.push_back(n); 9 } 10 11 void dfs(LL k,LL t,LL s,LL n){ ///求与n互素个数 12 if(k==p.size()){ 13 if(t&1) ans-=...
        阅读全文
                
摘要:#include #include using namespace std; #define LL long long const int N = 5e6 + 2; bool np[N]; int prime[N], pi[N]; int getprime() { int cnt = 0; np[0] = np[1] = true; ...
        阅读全文
                
摘要:#include #include #include #include #include using namespace std; const int MAXN=400; const int INF=0x7fffffff; int N,M,S; int a[MAXN][MAXN],dis[MAXN]; bool visit[MAXN],d[MAXN]; int StoerWagner(in...
        阅读全文
                
摘要:for 所有的组k for v=V..0 for 所有的i属于组k f[v]=max{f[v],f[v-c[i]]+w[i]}
        阅读全文
                
摘要:/* 01最优(小)比例生成树 求最大比例更改prim即可 poj2728 将图中点连成一棵树满足 总花费/总长度 最小 */ int n,m; double d[1005],cost[1005],ben[1005]; double pic[1005][1005]; ///两点间距离 double cpic[1005][1005]; ///两点间花费 int vis...
        阅读全文
                
摘要:/* 01分数规划模板(Dinkelbach) 01分数规划就是把 sum(a)/sum(b)转换成 f(x)=sum(a)-ans*sum(b); 当f(x)取到0时,ans取到了最大(小)值 poj 2976 两个长度为n的数组a,b 可以除去m个,怎样选择才能使剩下的 sum(a)/sum(b)的百分数最大 */ int ...
        阅读全文
                
摘要:inline void add(int x,int y,int f,int c){ node[hcnt]=Node(y,head[x],f,c);head[x]=hcnt++; node[hcnt]=Node(x,head[y],0,-c);head[y]=hcnt++; } int spfa(){ mst(d,-1);d[S]=0; mst(vis,0);q.p...
        阅读全文
                
摘要:int n,m,x; vectorV[1005]; int dp[105][maxn]; int w[1005],v[1005]; void dfs(int u,int m){/// m当前可用容量,u 父节点 if(m<=0)return; for(int e:V[u]){ ///vector模拟树 for(int k=0;k<=m-w[e];++k)d...
        阅读全文
                
摘要:void solve(){ for(int i=1;i=k*w[i];--j) ///w[i] 是第 i 个物品的重量 dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]); ///v[i] 是第 i 个物品价值 k=c[i]+1-k; for(int j=sum;j>=k*w[i];--j) ...
        阅读全文
                
摘要:bool spfa() { for(int i=0;id[e[i].to]) { d[e[i].to]=d[now]+e[i^1].c; if(!mark[e[i].to]) { mark[e[i].to]=1; ...
        阅读全文
                
摘要:struct Matrix { int n , m , a[2][2]; Matrix (int _n = 0, int _m = 0) { n = _n , m = _m; memset(a , 0 , sizeof(a)); } Matrix operator * (const Matrix &R) const { ...
        阅读全文
                
摘要:void exgcb(LL a,LL b,LL &d,LL &x,LL &y){ if(!b){d=a;x=1;y=0;return;} exgcb(b,a%b,d,y,x);y-=x*(a/b); } LL ny(LL a,LL b){ ///求a关于b的逆元(要求a,b互质) LL d,x,y; exgcb(a,b,d,x,y); return d=...
        阅读全文
                
摘要:1 void ins(int k,int x,int t){ 2 for (; x<=tot; x+=x&-x) c[k][x]+=t; 3 } 4 ll getsum(int k,int x){ 5 ll t=0; for (; x; x-=x&-x) t+=c[k][x]; return t; 6 } 7 void mdy(int x,int y,int z){...
        阅读全文
                
摘要:1 int n,m,hcnt,qcnt; 2 int head[maxn],query[maxn],vis[maxn]; 3 int anc[maxn],fp[maxn],indu[maxn],ans[N]; 4 struct Node{ 5 int to,next; 6 }node[maxn]; 7 struct Query{ 8 int to,next,ind...
        阅读全文
                
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15...
        阅读全文
                
摘要:题目链接:传送门 题目大意:给你一副无向联通图,判断是不是二分图 题目思路:交叉染色法 下面着重介绍下交叉染色法的定义与原理 首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况: 1.未染色 那么继续染色此节点(染色为另一种颜色) 2.已染色但和当前节点颜色不同 跳过该点 3.已染色并且和当前
        阅读全文
                
摘要:题目链接:传送门 题目大意:给你一副无向图,求有多少个割点 题目思路:tarjan算法(此题读入是字符串读入,需注意)
        阅读全文
                
摘要:题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关系: 1.若G是完全图,k(G)=|V(G)|-1 2.若G不是完全图,k(G)=min{P(A,B
        阅读全文
                
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号