codevs 1269 匈牙利遊戲

2022-05-15 21:40:45 字數 2558 閱讀 4669

/*

暴力+亂搞 55分(似乎只有暴力得分了)

*/#include

#include

#include

#include

#include

#define maxn 1000010

using

namespace

std;

intn,m,num,head[maxn],dfn[maxn],low[maxn],s[maxn],top,f[maxn];

intsum,topt,c[maxn],dis[maxn],dis2[maxn],vis[maxn],pre[maxn];

int belong[maxn],cir[maxn],ans1=0x7fffffff,ans2=0x7fffffff

,d,falg;

struct

node

e[maxn];

void add(int

from,int to,int

dis)

void tarjan(int

x)

else

if(f[e[i].v]==1)low[x]=min(low[x],dfn[e[i].v]);

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

c[sum]++;f[s[top]]=0

; belong[s[top]]=sum;top--;

}}void

spfa()}}

}}void spfa2(int si,int

ti) }}}

}void dfs(int x,int

d)

for(int i=head[x];i;i=e[i].pre)

dfs(e[i].v,d+e[i].t);

}int

main()

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

if(dfn[i]==0

)tarjan(i);

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

if(c[belong[i]]>=2)cir[i]=1

; spfa();

int p=n;

while(p>1

)

if(falg)

p=n;

while(p>1

)

if(d!=dis[n])ans1=min(ans1,d);

if(ans2==0x7fffffff&&sum==0)printf("

-1\n");

else printf("

%d\n

",min(ans1,ans2));

return0;

}

/*

正解. 正反跑spfa 記錄每個節點的1跑過來的最短路和n跑過來的最短路

考試的時候想的是每個點的這兩個值加起來 然後求此小值

後來發現 樣例都過不了.....

原因是 這裡的dis陣列的定義決定了會忽略一些邊

所以 接著這個思路想下來 我們強制走某一條邊

也就是我們列舉邊 然後計算 disu + dis2v + uv 就是一條路徑的長度

注意這裡統計出來的數的個數不是路徑數 因為同一條路徑上的許多邊都統計了一遍

但這裡求的是嚴格次短路 這就很好的符合我們求出來的值 只需要找出第二小的不同的就好

也就是說 這種方法不能求次短路

*/#include

#include

#include

#include

#include

#define maxn 200010

using

namespace

std;

intn,m,num,num2,head[maxn],head2[maxn],dis[maxn],dis2[maxn],vis[maxn],ans[maxn],l;

int ans1=707406378,ans2=707406378

;struct

node

e[maxn],e2[maxn];

void add(int

from,int to,int

dis)

void add2(int

from,int to,int

dis)

void

spfa()}}

}}void

spfa2()}}

}}int

main()

spfa();spfa2();

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

sort(ans+1,ans+1+l);

ans1=ans[1

];

for(int i=2;;i++)

if(ans[i]!=ans1)

if(ans2>=0x7fffffff)printf("

-1\n");

else printf("

%d\n

",ans2);

return0;

}

codevs 1269 匈牙利遊戲

qaq 求次短路分三種情況討論 1 最短能更新最短 2 次短能更新次短 3 最短能更新次短並且次短不能更新最短 什麼叫不能更新最短了呢 就是更新完了和最短一樣長的 恩恩 就是這樣 include include include include include using namespace std ...

codevs 1269 匈牙利遊戲

codevs 1269 匈牙利遊戲 題目大意 求次短路 資料範圍 2 n 20000,1 m 100000,1 l 10000 思路 spfa的時候在更新最短路的時候順便更新一下次短路就好了。題解 include include include include using namespace std...

CodeVS 1269 匈牙利遊戲

題目描述 description 歡迎來到匈牙利遊戲!布達佩斯 匈牙利首都 的街道形成了乙個彎曲的單向網路。你被強制要求參加乙個賽跑作為乙個tv秀的一部分節目,比賽中你需要穿越這些街道,從s開始,到t結束。很自然的,你想要盡快的完成比賽,因為你的比賽完成的越好,你就能得到更多的商業 合同。但是,有乙...