/*暴力+亂搞 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結束。很自然的,你想要盡快的完成比賽,因為你的比賽完成的越好,你就能得到更多的商業 合同。但是,有乙...