Java打板_【打板进行中】

1.快速排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=100005;using namespacestd;intn,a[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}void qsort(int *s,int l,intr) {int bs=s[rand()%(r-l+1)+l];int i=l,j=r;while(i<=j) {while(s[j]>bs) j--;while(s[i]

swap(s[i],s[j]);

i++; j--;

}

}if(j>l) qsort(s,l,j);if(i

}voidwork() {

qsort(a,1,n);for(int i=1;i

printf("%d\n",a[n]);

}voidinit() {

read(n);for(int i=1;i<=n;i++) read(a[i]);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifsrand(time(0));

init();

work();return 0;

}

View Code

2.归并排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=100005;using namespacestd;intn,a[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}inttp[maxn];void msort(int *s,int l,intr) {if(l>=r) return;int mid=((l+r)>>1);

msort(s,l,mid); msort(s,mid+1,r);int tl=l,i=l,j=mid+1;while(tl<=r) {if(i<=mid&&(j>r||s[i]

}for(int i=l;i<=r;i++) s[i]=tp[i];

}voidwork() {

msort(a,1,n);for(int i=1;i

printf("%d\n",a[n]);

}voidinit() {

read(n);for(int i=1;i<=n;i++) read(a[i]);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifsrand(time(0));

init();

work();return 0;

}

View Code

3.kmp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty雨欲予鱼愉

#include#include#include#include#include#include#include#include

const int maxn=1000007;using namespacestd;chara[maxn],b[maxn];intnxt[maxn],ans[maxn],sza,szb;void make_nxt(char b[],intnxt[]) {for(int i=1,k=0;i

nxt[i]=k;

}

}void kmp(char a[],char b[],intnxt[]) {

make_nxt(b,nxt);for(int i=0,k=0;i

}

}voidwork() {

kmp(a,b,nxt);for(int i=1;i<=ans[0];i++)

printf("%d\n",ans[i]);for(int i=0;i

printf("%d\n",nxt[szb-1]);

}voidinit() {

scanf("%s",a);

getchar();

scanf("%s",b);

sza=strlen(a);

szb=strlen(b);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

4.SLF优化的spfa

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty雨欲予鱼愉

#include#include#include#include#include#include#include#include

const int maxn=10005;const int maxm=500007;using namespacestd;intdis[maxn],n,m,s;

templatevoid read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') ch=getchar(),f=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}intecnt,fir[maxn],nxt[maxm],to[maxm],val[maxm];void add(int u,int v,intw) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;

}int que[maxm+5],ql=1,qr=0,vis[maxn];void spfa(ints) {for(int i=1;i<=n;i++) dis[i]=2147483647;

memset(vis,0,sizeof(vis));

dis[s]=0;

vis[s]=1;

que[++qr]=s;while(ql<=qr) {int x=que[(ql+maxm)%maxm];

ql++;

vis[x]=0;for(int i=fir[x];i;i=nxt[i]) {if(dis[to[i]]>dis[x]+val[i]) {

dis[to[i]]=dis[x]+val[i];if(!vis[to[i]]) {

vis[to[i]]=1;if(ql<=qr&&(dis[que[(ql+maxm)%maxm]]>dis[to[i]])) {

ql--;

que[(ql+maxm)%maxm]=to[i];

}else{

qr++;

que[(qr+maxm)%maxm]=to[i];

}

}

}

}

}

}voidwork() {

spfa(s);for(int i=1;i<=n;i++)

printf("%d",dis[i]);

printf("\n");

}voidinit() {

read(n);

read(m);

read(s);for(int i=1;i<=m;i++) {intx,y,z;

read(x); read(y); read(z);

add(x,y,z);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

5.堆优化的dijkstra

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty雨欲予鱼愉

#include#include#include#include#include#include#include#include

const int maxn=10005;const int maxm=500007;using namespacestd;intdis[maxn],n,m,s;

templatevoid read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') ch=getchar(),f=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}intecnt,fir[maxn],nxt[maxm],to[maxm],val[maxm];void add(int u,int v,intw) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;

}structnode {intx,dis;

node(){}

node(int x,intdis):x(x),dis(dis){}

friendbool operator B.dis;

}

};

priority_queueque;intvis[maxn];void spfa(ints) {for(int i=1;i<=n;i++) dis[i]=2147483647;

memset(vis,0,sizeof(vis));

dis[s]=0;

que.push(node(s,0));while(!que.empty()) {

node tp=que.top();int x=tp.x;

que.pop();if(vis[x]) continue;

vis[x]=1;for(int i=fir[x];i;i=nxt[i])if(!vis[to[i]]&&dis[to[i]]>dis[x]+val[i]) {

dis[to[i]]=dis[x]+val[i];

que.push(node(to[i],dis[to[i]]));

}

}

}voidwork() {

spfa(s);for(int i=1;i<=n;i++)

printf("%d",dis[i]);

printf("\n");

}voidinit() {

read(n);

read(m);

read(s);for(int i=1;i<=m;i++) {intx,y,z;

read(x); read(y); read(z);

add(x,y,z);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

6.左偏树

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty雨欲予鱼愉

#include#include#include#include#include#include#include#include

const int maxn=100000+299;using namespacestd;int a[maxn],n,m,bo[maxn],fa[maxn],dis[maxn],ch[maxn][2];

templatevoid read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') ch=getchar(),f=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]);}#define lc ch[x][0]

#define rc ch[x][1]

int merge(int x,inty) {if(!(x*y)) return x^y;if(a[x]>a[y]) swap(x,y);

fa[y]=x;

rc=merge(rc,y);if(dis[rc]>dis[lc]) swap(lc,rc);if(!rc) dis[x]=0;else dis[x]=dis[rc]+1;returnx;

}voidwork() {for(int i=1;i<=m;i++) {into,x,y;

read(o);if(o==1) {

read(x);

read(y);if(!bo[x]&&!bo[y]&&(find(x)!=find(y)))

x=merge(find(x),find(y));

}else{

read(x);if(bo[x]) {

printf("-1\n");continue;

}

x=find(x);

printf("%d\n",a[x]);

fa[lc]=lc; fa[rc]=rc;

lc=merge(lc,rc);if(!lc) fa[x]=rc;else fa[x]=lc;

lc=rc=0;

bo[x]=1;

}

}

}voidinit() {

read(n);

read(m);for(int i=1;i<=n;i++) {

read(a[i]);

fa[i]=i;

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

7.线性筛素数

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include

using namespacestd;const int maxn=10000007;intn,m,p[maxn];boolbo[maxn];

templatevoid read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') ch=getchar(),f=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}void get_prime(intn) {

bo[1]=1;for(int i=2;i<=n;i++) {if(!bo[i]) p[++p[0]]=i;for(int j=1;j<=p[0]&&p[j]*i<=n;j++) {

bo[p[j]*i]=1;if(i%p[j]==0) break;

}

}

}voidinit() {

read(n);

get_prime(n);

read(m);for(int i=1;i<=m;i++) {intx; read(x);if(bo[x]) printf("No\n");else printf("Yes\n");

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();return 0;

}

View Code

8.二分图最大匹配 匈牙利

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty雨欲予鱼愉

#include#include#include#include#include#include#include#include

const int maxn=2005;using namespacestd;intn,m,e,pr[maxn],vis[maxn],ans;

templatevoid read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') ch=getchar(),f=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int ecnt,fir[maxn],nxt[maxn*maxn],to[maxn*maxn];void add(int u,intv) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;

}int find(intx) {for(int i=fir[x];i;i=nxt[i]) if(!vis[to[i]]){int y=to[i];

vis[y]=1;if(!pr[y]||find(pr[y])) {

pr[y]=x;return 1;

}

}return 0;

}voidwork() {for(int i=1;i<=n;i++) {

memset(vis,0,sizeof(vis));

ans+=find(i);

}

printf("%d\n",ans);

}voidinit() {

read(n);

read(m);

read(e);for(int i=1;i<=e;i++) {intx,y;

read(x);

read(y);if(x<=n&&y<=m)

add(x,y);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

9.二分图匹配 km算法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

#define INF 0xfffffff

const int maxn=305;

typedeflong longLL;using namespacestd;intn,cx[maxn],cy[maxn],x[maxn],y[maxn],pr[maxn],slack[maxn];inta[maxn][maxn];int find(intu) {

x[u]=1;for(int i=1;i<=n;i++) if(!y[i]){if(cx[u]+cy[i]==a[u][i]) {

y[i]=1;if(pr[i]==-1||find(pr[i])) {

pr[i]=u;return 1;

}

}else slack[i]=min(slack[i],-a[u][i]+cx[u]+cy[i]);

}return 0;

}voidwork() {

memset(pr,-1,sizeof(pr));

memset(cy,0,sizeof(cy));for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) slack[j]=INF;for(;;) {

memset(x,0,sizeof(x));

memset(y,0,sizeof(y));if(find(i)) break;int d=INF;for(int j=1;j<=n;j++)if(!y[j]&&d>slack[j])

d=slack[j];if(d==INF) return;for(int j=1;j<=n;j++) {if(x[j]) cx[j]-=d;if(y[j]) cy[j]+=d;else slack[j]-=d;

}

}

}int ans=0;for(int i=1;i<=n;i++)

ans+=a[pr[i]][i];

printf("%d\n",ans);

}voidinit() {while(~scanf("%d",&n)) {for(int i=1;i<=n;i++) {

cx[i]=-INF;for(int j=1;j<=n;j++) {

scanf("%d",&a[i][j]);

cx[i]=max(cx[i],a[i][j]);

}

}

work();

}

}intmain() {

init();return 0;

}

View Code

10.线性基

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=101;

typedeflong longLL;using namespacestd;intn;

LL a[maxn],b[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}voidwork() {for(int i=1;i<=n;i++)for(int j=60;j>=0;j--)if((1LL<

}

LL ans=0;for(int i=60;i>=0;i--)if((ans^b[i])>ans) ans^=b[i];

printf("%lld\n",ans);

}voidinit() {

read(n);for(int i=1;i<=n;i++) read(a[i]);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

11.高斯消元

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=105;

typedeflong longLL;using namespacestd;intn;doublea[maxn][maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int gauss(double a[][105],intn) {for(int i=1;i<=n;i++) {int now=i;for(int j=i+1;j<=n;j++)if(a[j][i]>a[now][i]) now=j;if(now!=i)for(int j=i;j<=n+1;j++)

swap(a[i][j],a[now][j]);if(a[now][i]==0) return 0;for(int j=i+1;j<=n+1;j++)

a[i][j]/=a[i][i];

a[i][i]=1;for(int j=i+1;j<=n;j++) {for(int k=i+1;k<=n+1;k++)

a[j][k]-=a[i][k]*a[j][i];

a[j][i]=0;

}

}for(int i=n-1;i>=1;i--)for(int j=i+1;j<=n;j++)

a[i][n+1]-=a[i][j]*a[j][n+1];return 1;

}voidwork()

{if(!gauss(a,n)) printf("No Solution\n");else

for(int i=1;i<=n;i++)

printf("%.2lf\n",a[i][n+1]);

}voidinit() {

read(n);for(int i=1;i<=n;i++)for(int j=1;j<=n+1;j++)

read(a[i][j]);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

12.tarjan割点

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=100005;

typedeflong longLL;using namespacestd;intn,m,ans[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int ecnt,fir[maxn],nxt[maxn<<1],to[maxn<<1];void add(int u,intv) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;

nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;

}intrc,dfs_clock,dfn[maxn],low[maxn],cut[maxn];void tarjan(int x,intrt) {

dfn[x]=low[x]=++dfs_clock;for(int i=fir[x];i;i=nxt[i]) {if(!dfn[to[i]]) {if(x==rt) rc++;

tarjan(to[i],rt);

low[x]=min(low[x],low[to[i]]);if(x!=rt&&low[to[i]]>=dfn[x]) cut[x]=1;

}else low[x]=min(low[x],dfn[to[i]]);

}if(x==rt&&rc>=2) cut[x]=1;

}voidwork() {for(int i=1;i<=n;i++)if(!dfn[i]) {rc=0;tarjan(i,i);}for(int i=1;i<=n;i++)if(cut[i])

ans[++ans[0]]=i;

printf("%d\n",ans[0]);for(int i=1;i

}voidinit() {

read(n);

read(m);for(int i=1;i<=m;i++) {intx,y;

read(x); read(y);

add(x,y);

}

}intmain() {

init();

work();return 0;

}

View Code

13.tarjan求桥

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#include#include#include#include#include#include#includetypedeflong longLL;using namespacestd;const int maxn=10000+299;const int maxm=100000*2+299;intT,n,m,x,y,fir[maxn],nxt[maxm],to[maxm],fa[maxn],cc,cut[maxm],dfn[maxn],id[maxm],low[maxn],dfs_clock,ecnt;void add(int x,int y,inttot) {

nxt[++ecnt]=fir[x]; fir[x]=ecnt; to[ecnt]=y; id[ecnt]=tot;

nxt[++ecnt]=fir[y]; fir[y]=ecnt; to[ecnt]=x; id[ecnt]=tot;

}voidclear() {

memset(fir,0,sizeof(fir));

memset(dfn,0,sizeof(dfn));

memset(low,0,sizeof(low));

memset(cut,0,sizeof(cut));

memset(fa,0,sizeof(fa)); ecnt=0;

dfs_clock=0;

}void tarjan(intx) {

dfn[x]=low[x]=++dfs_clock;for(int i=fir[x];i;i=nxt[i]) {if(!dfn[to[i]]) {

fa[to[i]]=i;

tarjan(to[i]);

low[x]=min(low[x],low[to[i]]);

}else if(id[fa[x]]!=id[i]) low[x]=min(low[x],dfn[to[i]]);

}if(fa[x]&&dfn[x]==low[x]) {

cc++;

cut[id[fa[x]]]=1;

}

}intmain()

{

scanf("%d",&T);while(T) {

clear();

scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) {

scanf("%d%d",&x,&y);

add(x,y,i);

}for(int i=1;i<=n;i++)if(!dfn[i]) tarjan(i);

printf("%d\n",cc);for(int i=1;i<=m;i++)if(cut[i]) { cc--; if(cc) printf("%d",i); else printf("%d\n",i);}--T;if(T) printf("\n");

}return 0;

}

View Code

14.网络最大流

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

#define inf 0xfffffff

const int N=10007;const int M=100007;

typedeflong longLL;using namespacestd;int n,m,s,t,d[N],c[N],ecnt=1;

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}structedge {int from,to,cap,flow,nxt;

edge(){}

edge(int from,int to,int cap,int flow,int nxt):from(from),to(to),cap(cap),flow(flow),nxt(nxt){}

}e[M<<1];intfir[N],cur[N];void add(int u,int v,intw) {

e[++ecnt]=edge(u,v,w,0,fir[u]);

e[++ecnt]=edge(v,u,0,0,fir[v]);

fir[u]=ecnt-1; fir[v]=ecnt;

}

queueque;voidbfs() {for(int i=1;i<=n;i++) d[i]=n;

d[t]=0;

que.push(t);while(!que.empty()) {int x=que.front();

que.pop();for(int i=fir[x];i;i=e[i].nxt) {int y=e[i].to;if(d[y]==n&&e[i].cap==e[i].flow) {

d[y]=d[x]+1;

que.push(y);

}

}

}

}intp[N];intcal() {int fl=inf;for(int x=t;x!=s;x=e[p[x]].from)

fl=min(fl,e[p[x]].cap-e[p[x]].flow);for(int x=t;x!=s;x=e[p[x]].from) {

e[p[x]].flow+=fl;

e[p[x]^1].flow-=fl;

}returnfl;

}intmax_flow() {

bfs();for(int i=1;i<=n;i++) cur[i]=fir[i],c[d[i]]++;int res=0;for(int x=s;d[x]

res+=cal();

x=s;

}int ok=0;for(int &i=cur[x];i;i=e[i].nxt) {int y=e[i].to;if(d[y]+1==d[x]&&e[i].cap>e[i].flow) {

ok=1;

p[y]=i;

x=y;break;

}

}if(!ok) {

cur[x]=fir[x];int M=n;for(int i=cur[x];i;i=e[i].nxt) {int y=e[i].to;if(e[i].flow

}if(!(--c[d[x]])) break;

c[d[x]=M]++;if(x!=s) x=e[p[x]].from;

}

}returnres;

}voidwork() {

printf("%d\n",max_flow());

}voidinit() {

read(n);

read(m);

read(s);

read(t);for(int i=1;i<=m;i++) {intu,v,w;

read(u);

read(v);

read(w);

add(u,v,w);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

15.最小费用最大流

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

#define inf 0xfffffff

const int N=5007;const int M=50007;

typedeflong longLL;using namespacestd;int n,m,s,t,ecnt=1;

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}structedge {int from,to,cap,flow,cost,nxt;

edge(){}

edge(int from,int to,int cap,int flow,int cost,int nxt):from(from),to(to),cap(cap),flow(flow),cost(cost),nxt(nxt){}

}e[M<<1];intfir[N],cur[N];void add(int u,int v,int w,intc) {

e[++ecnt]=edge(u,v,w,0,c,fir[u]);

e[++ecnt]=edge(v,u,0,0,-c,fir[v]);

fir[u]=ecnt-1; fir[v]=ecnt;

}intp[N];intcal() {int fl=inf;for(int x=t;x!=s;x=e[p[x]].from)

fl=min(fl,e[p[x]].cap-e[p[x]].flow);for(int x=t;x!=s;x=e[p[x]].from) {

e[p[x]].flow+=fl;

e[p[x]^1].flow-=fl;

}returnfl;

}

queueque;intdis[N],vis[N];intspfa() {for(int i=1;i<=n;i++) dis[i]=inf;

dis[s]=0; vis[s]=1; que.push(s);while(!que.empty()) {int x=que.front();

que.pop(); vis[x]=0;for(int i=fir[x];i;i=e[i].nxt) {int y=e[i].to;if(e[i].cap>e[i].flow&&dis[y]>dis[x]+e[i].cost) {

p[y]=i;

dis[y]=dis[x]+e[i].cost;if(!vis[y]) {

vis[y]=1;

que.push(y);

}

}

}

}return (dis[t]!=inf);

}int ans2=0;intmax_flow() {int res=0;while(spfa()) {int tp=cal();

res+=tp;

ans2+=tp*dis[t];

}returnres;

}voidwork() {

printf("%d",max_flow());

printf("%d\n",ans2);

}voidinit() {

read(n);

read(m);

read(s);

read(t);for(int i=1;i<=m;i++) {intu,v,w,c;

read(u);

read(v);

read(w);

read(c);

add(u,v,w,c);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

16.倍增求lca

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=500007;

typedeflong longLL;using namespacestd;intn,m,rt;

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int ecnt,fir[maxn],nxt[maxn<<1],to[maxn<<1];void add(int u,intv) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;

nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;

}int f[maxn][20],R[maxn];void dfs(int x,intfa) {

f[x][0]=fa; R[x]=R[fa]+1;for(int i=1;i<=19;i++)

f[x][i]=f[f[x][i-1]][i-1];for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {

dfs(to[i],x);

}

}int get_lca(int x,inty) {if(R[x]=0;i--)if(f[x][i]&&R[f[x][i]]>=R[y])

x=f[x][i];if(x==y) returnx;for(int i=19;i>=0;i--)if(f[x][i]&&f[x][i]!=f[y][i])

x=f[x][i],y=f[y][i];return f[x][0];

}voidwork() {

dfs(rt,0);for(int i=1;i<=m;i++) {intx,y;

read(x); read(y);

printf("%d\n",get_lca(x,y));

}

}voidinit() {

read(n);

read(m);

read(rt);for(int i=1;i

read(u); read(v);

add(u,v);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

17.tarjan求lca

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=500007;

typedeflong longLL;using namespacestd;intn,m,rt;

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int ecnt,fir[maxn],nxt[maxn<<1],to[maxn<<1];void add(int u,intv) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;

nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;

}int cnt,fi[maxn],nx[maxn<<1],tt[maxn<<1],id[maxn<<1],ans[maxn];void add_ask(int u,int v,inti) {

nx[++cnt]=fi[u]; fi[u]=cnt; tt[cnt]=v; id[cnt]=i;

nx[++cnt]=fi[v]; fi[v]=cnt; tt[cnt]=u; id[cnt]=i;

}intfa[maxn],vis[maxn];int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]);}void dfs(int x,intf) {for(int i=fi[x];i;i=nx[i])if(vis[tt[i]])

ans[id[i]]=find(tt[i]);

vis[x]=1;for(int i=fir[x];i;i=nxt[i]) if(to[i]!=f)

dfs(to[i],x);

fa[x]=f;

}voidwork() {for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++) {intx,y;

read(x); read(y);

add_ask(x,y,i);

}

dfs(rt,0);for(int i=1;i<=m;i++)

printf("%d\n",ans[i]);

}voidinit() {

read(n);

read(m);

read(rt);for(int i=1;i

read(u); read(v);

add(u,v);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

18.树剖求lca

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=500007;

typedeflong longLL;using namespacestd;intn,m,rt;

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}int ecnt,fir[maxn],nxt[maxn<<1],to[maxn<<1];void add(int u,intv) {

nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;

nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;

}intR[maxn],sz[maxn],top[maxn],fa[maxn];void dfs(int x,intf) {

R[x]=R[f]+1;

sz[x]=1; fa[x]=f;for(int i=fir[x];i;i=nxt[i]) if(to[i]!=f) {

dfs(to[i],x);

sz[x]+=sz[to[i]];

}

}void DFS(int x,inttt) {

top[x]=tt;int mson=0;for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa[x]&&sz[to[i]]>sz[mson]){

mson=to[i];

}if(!mson) return;

DFS(mson,tt);for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa[x]&&to[i]!=mson){

DFS(to[i],to[i]);

}

}int get_lca(int x,inty) {while(top[x]!=top[y]) {if(R[top[x]]

x=fa[top[x]];

}if(R[x]>R[y]) swap(x,y);returnx;

}voidwork() {

dfs(rt,0);

DFS(rt,rt);for(int i=1;i<=m;i++) {intx,y;

read(x); read(y);

printf("%d\n",get_lca(x,y));

}

}voidinit() {

read(n);

read(m);

read(rt);for(int i=1;i

read(u); read(v);

add(u,v);

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();

work();return 0;

}

View Code

19.manacher

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=11000007;

typedeflong longLL;using namespacestd;int tot,ans,rad[maxn<<1];char a[maxn<<1];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}voidmanacher() {for(int i=0,j=0,k;i

rad[i]=j;

ans=max(ans,j);for(k=1;k<=j&&rad[i-k]!=rad[i]-k;k++)

rad[i+k]=min(rad[i-k],rad[i]-k);

i+=k;

j=max(j-k,0);

}

}voidinit() {

a[tot++]='&';

a[tot++]='#';char ch=getchar();while(ch'z') ch=getchar();for(;ch>='a'&&ch<='z';ch=getchar()) {

a[tot++]=ch;

a[tot++]='#';

}

a[tot++]='*';

manacher();

printf("%d\n",ans);

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();return 0;

}

View Code

20.AC自动机

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#includetypedeflong longLL;using namespacestd;const int maxn=1e6+7;int ch[maxn][26],w[maxn],fail[maxn],tot,rt,n,ans;chara[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}voidinsert() {int now=rt;for(int i=0;a[i]!='\0';i++) {int c=a[i]-'a';if(!ch[now][c]) ch[now][c]=++tot;

now=ch[now][c];

}

w[now]++;

}

queueque;voidget_fail() {

que.push(rt);while(!que.empty()) {int x=que.front();

que.pop();for(int i=0;i<26;i++) if(ch[x][i]){int y=ch[x][i];if(x==rt) fail[y]=rt;else{int tp=fail[x];while(fail[tp]&&!ch[tp][i]) tp=fail[tp];if(ch[tp][i]) fail[y]=ch[tp][i]; else fail[y]=rt;

}

que.push(y);

}

}

}voidqry() {int now=rt;for(int i=0;a[i]!='\0';i++) {int c=a[i]-'a';while(!ch[now][c]&&fail[now]) now=fail[now];if(ch[now][c]) {

now=ch[now][c];

ans+=w[now];

w[now]=0;int tp=fail[now];while(tp&&w[tp]) {

ans+=w[tp];

w[tp]=0;

tp=fail[tp];

}

}

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifread(n);for(int i=1;i<=n;i++) {

scanf("%s",a);

insert();

}

get_fail();

scanf("%s",a);

qry();

printf("%d\n",ans);return 0;

}

View Code

21.lucas定理

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Twenty

#include#include#include#include#include#include#include#include#include

const int maxn=1e5+7;

typedeflong longLL;using namespacestd;intT,p;

LL n,m,power[maxn];

template void read(T &x) {char ch=getchar(); T f=1; x=0;while(ch!='-'&&(ch'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;

}

LL ksm(LL a,LL b,intp) {

LLbase=a,res=1;while(b) {if(b&1) (res*=base)%=p;

(base*=base)%=p;

b>>=1;

}returnres;

}

LL cal(LL n,LL m,intp) {if(m>n) return 0;return power[n]*ksm(power[m]*power[n-m]%p,p-2,p)%p;

}

LL lucas(LL n,LL m,intp) {if(!m) return 1;return cal(n%p,m%p,p)*lucas(n/p,m/p,p)%p;

}voidinit() {

read(T);while(T--) {

read(n);

read(m);

read(p);

power[0]=1;for(int i=1;i<=p;i++) power[i]=power[i-1]*i%p;

printf("%lld\n",lucas(n+m,m,p));

}

}intmain() {

#ifdef DEBUG

freopen(".in","r",stdin);

freopen(".out","w",stdout);#endifinit();return 0;

}

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值