- 博客(128)
- 收藏
- 关注
原创 偷钻石(网络流)
传送门#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fconst int maxn=205;int n,m,g[maxn][maxn],flow[maxn],pre[maxn];bool bfs(int s,int t,int v){//搜索增广路,源点,汇点,顶点数 memset(pre,-1,sizeof(pre)); memset(flow,inf,sizeof(flow)); queue
2021-09-23 20:13:11
104
原创 最小割(最大流)
传送门#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fconst int maxn=205;int n,m,g[maxn][maxn],pre[maxn],flow[maxn];bool bfs(int s,int t,int v){ memset(pre,-1,sizeof pre); memset(flow,inf,sizeof flow); queue<int> q; q.pu
2021-09-23 19:55:58
99
原创 网络流 分房间(最大流)
传送门#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fconst int maxn=205;int n,m,g[maxn][maxn],pre[maxn],flow[maxn];bool bfs(int s,int t,int v){ memset(pre,-1,sizeof pre); memset(flow,inf,sizeof flow); queue<int> q; q.pu
2021-09-23 19:33:19
119
原创 hdu1532网络流(模板)
传送门//从汇点到源点遍历路径,更新残留网络 #include<bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int maxn=205;int n,m,g[maxn][maxn],pre[maxn],f[maxn];//pre[]记录路径(前驱节点),f[]记录最小剩余容量 bool bfs(int s,int t,int v){//搜索增广路,源点,汇点,顶点数 memset(pre,-1,s
2021-09-16 20:51:12
77
原创 铺地砖(状压dp)
传送门#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mode=1e9+7;const int maxn=(1<<17)+5;ll dp[maxn<<1],*pre,*cur;//分别从前往后,从后往前int t,n,m;int main(){ int s; cin>>t; while(t--){ cin>>n>&g
2021-09-07 20:36:04
288
原创 集合划分(状压dp)
#include<bits/stdc++.h>using namespace std;const int maxn=(1<<16)+5;int n,a[20],dp[maxn],sum[maxn]={0};//dp[s]表示出现s集合,可行划分的总数 int c[maxn],ispri[1700]={1,1};int main(){ int t,s; scanf("%d",&t); for(int i=0;i<16;i++) c[1<<i]
2021-09-07 19:14:45
129
原创 hdu5418(同5691)
传送门#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fconst int maxn=(1<<16)+5;int n,m,dp[maxn][20],g[20][20],c[maxn];int main(){ int t,S,u,v,w; for(int i=0;i<16;i++) c[1<<i]=i+1; scanf("%d",&t); while(t--)
2021-09-03 19:37:25
78
原创 hdu5691状压dp
传送门状态转移 dp[s|(1<<(j-1))][j]=max(dp[s|(1<<(j-1))][j],dp[s][i]+ai*aj)有虚假态#include<bits/stdc++.h>using namespace std;#define inf 0x80000000int dp[1<<20][20];//dp[i][j],i为最大1<<n的二进制数,表示这n个数的当前选择方案,j表示第j个数为结尾 int a[20],p[2
2021-09-03 11:56:35
90
原创 hdu7101滑动窗口(双指针)
传送门#include<bits/stdc++.h>using namespace std;#define pos(x,y) s[x%y][x/y%len[x%y]]-'a' //求第x个加入的字符转换为二进制后在哪一位 typedef long long ll;int len[101],cnt[26];char s[101][13];int t,n;int main(){ int f1,f2;//标记出现的所有字符 int ml,mg;//ml标记字符串最大长度,mg
2021-09-02 17:34:53
136
原创 hdu6287可持久线段树+线性筛
传送门#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int n,m;int pri[maxn],vis[maxn],pos[maxn],c=0;//质数表,最大质因子及其序号 int tot=-1,ver[maxn];struct st{ int l,r,s;//s为质因子出现次数 }tre[maxn<<8];void init(){//线性筛 memset(pri,0,size
2021-09-02 17:12:05
86
原创 hdu7108哈希
添加链接描述#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+5;int t,n;char ch[maxn];ll s;map<pair<int,int>,int> pos;int main(){ ll x,y; scanf("%d",&t); while(t--){ x=y=0; s=0; while(!pos
2021-09-01 15:59:41
126
原创 洛谷2617 动态可持久线段树
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=2e5+5;struct st{ int l,r,sum;}tre[maxn<<9];struct op{ char s[2]; int x,y,z;}q[maxn];int a[maxn],b[maxn];int tot,ver[maxn];int n,m,c;int ndl[maxn],ndr[maxn],cntl,cntr;
2021-08-31 21:04:29
89
原创 主席树(mex)
添加链接描述#include<bits/stdc++.h>using namespace std;int n,m,t;const int maxn=2e5+5;struct st{ int l,r,mi;}tre[maxn<<5];int tot,ver[maxn];void pushup(int root){ st &rt=tre[root]; st &l1=tre[rt.l ]; st &r1=tre[rt.r ]; rt.mi
2021-08-31 14:59:47
134
原创 可持久线段树(主席树)模板
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int t,n,m;int tot;int ver[maxn];struct st{ int l,r,sum;}tre[maxn<<5];int build(int l,int r){ int root=++tot; tre[root].l =root; tre[root].r =root; tre[root].sum =0; r
2021-08-29 20:26:44
164
原创 洛谷3834主席树+离散化
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=2e5+5;int ver[maxn];int tot,n,m;struct st{ int l,r,sum;}tre[maxn<<5];int lsh[maxn],a[maxn];int build(int l,int r){ int root=++tot; tre[root].l =root; tre[root].r =root
2021-08-29 20:25:42
109
原创 hdu1269强连通分量(kosaraju算法)
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=1e4+5;int a[maxn],b[maxn];vector<int> p[maxn],q[maxn];//原图,反向图 int vis[maxn];int k;void dfs1(int x){ vis[x]=1; for(int i=0;i<p[x].size();i++){ if(vis[p[x][i]]==0) df
2021-08-19 15:50:13
123
原创 hdu4745
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=2005;int a[maxn];int dp[maxn][maxn];int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); a[i+n]=a[i];
2021-08-17 19:27:07
79
原创 hdu4283
添加链接描述#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint d[105],sum[105];int dp[105][105];int main(){ int t; cin>>t; int c=1; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>d[i]; sum[1]
2021-08-17 16:13:10
86
原创 hdu5115
添加链接描述#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint a[205],b[205];int dp[205][205];int main(){ int t; cin>>t; int c=1; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int
2021-08-17 14:51:15
115
原创 zjhu1040石子合并,区间dp(迭代+记忆化dfs)
添加链接描述法一:迭代#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint dp[105][105];int w[105][105],a[105];int n;int main(){ int t; cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } m
2021-08-17 10:17:36
103
原创 hdu3336
添加链接描述#include<bits/stdc++.h>using namespace std;const int mode=10007;const int maxn=200005;char x[maxn];int nexts[maxn];int n;void getnext(char* x){ nexts[1]=0; int k=0; for(int i=2;i<=n;i++){ while(k!=0&&x[k+1]!=x[i]) k=next
2021-08-16 14:56:02
65
原创 hdu2549
添加链接描述#include<bits/stdc++.h>using namespace std;int main(){ char x[10],c; int n,t; cin>>t; while(t--){ int ans; while((c=getchar())!='.') ans=0; while((c=getchar())!=' ') x[ans++]=c; cin>>n; if(n>ans) cout<<"0"
2021-08-15 20:23:20
168
原创 hdu2087kmp
#include<bits/stdc++.h>using namespace std;int p[1001];char c1[1001],c2[1001];int len1,len2;void pre(){ p[0]=0; p[1]=0; for(int i=1;i<len2;i++){ int j=p[i]; while(j>0&&c2[j+1]!=c2[i+1]) j=p[j]; if(c2[j+1]==c2[i+1]) p[i+1]=
2021-08-15 16:19:11
81
原创 hdu1043康托展开+bfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int maxn=4e5+1;int f[10];int vis[maxn],path[maxn],path2[maxn];void init(){ f[0]=1; for(int i=1;i<=9;i++) f[i]=f[i-1]*i;}int kt(string s){//康托 int res=0;
2021-08-11 19:49:53
134
原创 hdu1496
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=5e4+5;int f[maxn],g[maxn];int hashs(int k){ int t=k%maxn; if(t<0) t+=maxn; while(f[t]&&g[t]!=k) t=(t+1)%maxn; return t;}int main(){ int sum,a,b,c,d; int t[101];
2021-08-11 15:33:48
119
原创 hdu1425哈希(桶排序)
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;const int mm=5e5;int a[maxn],b[maxn];int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ memset(b,0,sizeof(b)); int k; for(int i=1;i<=n;i++){ scanf("
2021-08-10 15:38:34
101
原创 hdu2202求最大三角形面积(凸包)
添加链接描述#include<bits/stdc++.h>using namespace std;const int maxn=5e4+5;struct node{ double x,y;}p[maxn],s[maxn];double dis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double X(node p1,node p2,node p3){ return (p2.x
2021-08-10 14:39:08
118
原创 hdu1392求凸包周长
添加链接描述#include<bits/stdc++.h>using namespace std;struct node{ double x,y;}p[101],s[101];double dis(node a,node b){//求距离 node t; t.x=a.x-b.x; t.y=a.y-b.y; return sqrt(t.x*t.x+t.y*t.y);}double X(node p1,node p2,node p3){//叉乘 return (p2.x-p
2021-08-10 11:11:09
88
原创 hdu2036计算多边形面积
添加链接描述#include<bits/stdc++.h>using namespace std;int x[1000],y[1000];int sum(int p1,int p2){ double s1=0; s1=x[p1]*y[p2]-x[p2]*y[p1]; return s1;}int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=0;i<n;i++
2021-08-09 15:36:16
154
原创 hdu2108计算几何(判断凹凸)
添加链接描述#include<bits/stdc++.h>using namespace std;int n;int x[1000],y[1000];int find(int p1,int p2,int p3){ return (x[p1]-x[p2])*(y[p1]-y[p3])-(x[p1]-x[p3])*(y[p1]-y[p2]);}int main(){ while(scanf("%d",&n)!=EOF){ if(n==0) break; for(i
2021-08-09 15:14:56
92
原创 hdu2793
#include<bits/stdc++.h>#define mode 1000000007using namespace std;typedef long long ll;ll a,b;struct mm{ ll a[4][4];}ori,res;mm init(){ mm E; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(i==j) E.a[i][j]=1; else E.a[i][j]=0;
2021-08-09 10:34:09
114
原创 hdu6470
添加链接描述#include<bits/stdc++.h>#define mode 123456789using namespace std;typedef long long ll;ll n,t;struct mm{ ll a[6][6];}ori,res;mm init(){ mm E; for(int i=0;i<6;i++){ for(int j=0;j<6;j++){ if(i==j) E.a[i][j]=1; else E.a[i]
2021-08-03 10:56:39
197
原创 hdu1757
添加链接描述#include<bits/stdc++.h>using namespace std;typedef long long ll;ll k,m;struct mm{ ll a[11][11];}aa,bb;mm init(){ mm E; for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ if(i==j) E.a[i][i]=1; else E.a[i][j]=0; } } return
2021-08-02 14:03:39
68
原创 hdu1575矩阵快速幂
添加链接描述#include<bits/stdc++.h>#define mode(x) x%9973using namespace std;typedef long long ll;ll n,k;struct maps{ ll g[11][11];}aa;maps init(){ maps E; for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(i==j) E.g[i][j]=1; else E.g[i]
2021-08-02 09:37:28
66
原创 hdu1698
添加链接描述#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;int a[maxn];struct node{ int val; int lazy;}st[maxn<<2];void pushup(int rt){ st[rt].val =st[rt<<1].val +st[rt<<1|1].val ;}void build(int l,int r,int
2021-08-01 14:55:36
100
原创 hdu3308
添加链接描述#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;int a[maxn];int n,m,t;struct segtree{ int maxs; int lmax,rmax;}st[maxn<<2];void pushup(int rt,int l,int r){ st[rt].lmax =st[rt<<1].lmax ; st[rt
2021-08-01 10:33:47
56
原创 hdu1754线段树
添加链接描述#include<bits/stdc++.h>using namespace std;int n,m;const int maxn=2e5+5;int a[maxn];struct segtree{ int val;}st[maxn<<2];void pushup(int rt){ st[rt].val =max(st[rt<<1].val ,st[rt<<1|1].val );}void build(int l,int r
2021-07-30 16:19:21
76
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人