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;叄.tarjan 縮點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]);
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...