2023年7月訓練(壹)

2022-06-04 03:42:09 字數 2425 閱讀 3348

2019-07-25

luogu p3627 [apio2009]搶掠計畫

卡了三個小時,看了題解才作出來的(菜)

前驅知識:

壹~鄰接表儲存/遍歷

貳~spfa跑最長路(《改》就行了)

叄~tarjan縮點

壹.鄰接表儲存

兩個,add存無邊權,未縮點;build有邊權,已縮點。

void add(int u,int v)

void build(int u,int v,int w)

貳.輸入懶得開兩個head陣列了,所以memset了。

cnt記得重置為零。

cnt=0;

memset(e,0,sizeof(e));

memset(head,0,sizeof(head));

scanf("%d%d",&n,&m);

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

for(int i=1;i<=n;i++) scanf("%d",&w[i]);

scanf("%d%d",&s,&p);

for(int i=1;i<=p;i++) scanf("%d",&bar[i]);

叄.tarjan 縮點

void tarjan(int x)

else if(vis[t])

low[x]=min(low[x],dfn[t]);

}if(dfn[x]==low[x])

while(stk[top--]!=x);

}//陣列模擬棧

}

這裡我是用的陣列模擬棧,首先int tp=stk[top]取出棧頂

sum表示縮完點後這個點的點權

不是很懂tarjan的好好理解下tarjan彈棧的部分再看這裡就懂了

懂tarjan的模擬一下應該就懂了,每次彈棧時,所有被彈出的點都是縮完點後的乙個點

即sum[tot]+=w[tp],縮完點後的點權+=原點權

很好理解吧

不懂的說明你對tarjan還是理解不到位……這篇題解不是講tarjan的,樓下大佬應該有詳細講解。

然後vis[tp]=false表示tp已經出棧

g表示縮完點後每個點在哪個點中

即g[tp]=tot,tp這個點在縮完點後的第tot個點裡

然後用棧頂和x比較,標準tarjan操作

stk[top--]就相當於pop彈棧了

肆.spfa跑最長路

void spfa(int s)

e[maxn];

int m,n,p,s,cnt,be[maxn],u[maxn],v[maxn],w[maxn],head[maxn],bar[maxn],dis[maxn],dfn[maxn],low[maxn],stk[maxn],sum[maxn];

bool vis[maxn];

queue q;

int ans,top,tot,total;

void add(int u,int v)

void build(int u,int v,int w)

void tarjan(int x)

else if(vis[t])

low[x]=min(low[x],dfn[t]);

}if(dfn[x]==low[x])

while(stk[top--]!=x);

} }

void spfa(int s)

{ for(int i=1;i<=tot;i++) dis[i]=0;

int bes=be[s];

q.push(bes);

vis[bes]=true;

dis[bes]=sum[bes];

while(!q.empty())

{int h=q.front();q.pop();

vis[h]=false;

for(int i=head[h];i;i=e[i].next)

{int t=e[i].to;

if(dis[t]

謝謝你能看到這裡。

2019-07-25 22:35:43

以下為私貨,可以不看↓↓

reol要出新專啦!!!

唱歌超好聽,人長得超好看的!!!

再次謝謝你能看到這裡。

2019-07-2522:36:16

2023年7月訓練 陸

模板 luogo p3379 模板 最近公共祖先 lca 今天講的時候有點跑神,現在卑微地來補習 菜 lca指的是最近公共祖先 least common ancestors 最簡單的演算法無疑是從兩個點乙個個往上走,出現的第乙個兩個點都走過的點即為兩點的lca。但是時間很長。所以起用倍增,倍增的作用...

2023年7月24日訓練日記

早上去了討論了一下昨天的b題,其實莫隊也挺好理解的,那道題直接套板子就能過,然後昨天那個二十幾行的 也理解了,思路特別巧妙,和我之前的思路差不多,只不過我少考慮了乙個點。然後上午看了一下字首和,字首和在應用中有不少技巧,不單單是對資料求和,還可以和平均數求差後求和。然後就是幾種排序,選擇排序,插入排...

2023年7月29日訓練日記

上午把昨天下午比賽的題補完了,這幾道題真是一言難盡,不難但是誰能想到啊,說明還是見的少。知識面廣的輕鬆ak。然後上午看了佇列,學了以前沒學過的雙端佇列,雙端佇列和vector差不多,就是有兩個介面,vector只能從隊尾新增,deque可以從兩端新增,功能也多了點。下午刷了幾道佇列的題,有一道以前s...