本人的**可以說洛谷最簡單的了
我的存圖方式有些與眾不同
a[5000][5000]中第乙個下標表示第幾個點,第二個表示與點相連的點
雖然比前向星廢記憶體但時間極快,大概是o(n)的。
現在步入正題
用深搜查找最小路徑很簡單
#include
#include
using
namespace std;
int n,m,a[
5005][
5005
],lj[
5005]=
,c[5005]=
,s=0
,fs=
1,h[
5005]=
,huan=
0,dd=
0,b[
5009][
5009];
intcmp
(int aa,
int bb)
void
dfs(
int x)
for(
int i=
1;i<=lj[x]
;i++)}
}int
main()
for(
int i=
1;i<=n;i++
)sort
(a[i]+1
,a[i]
+lj[i]+1
,cmp)
;printf
("1 ");
if(m==n-1)
dfs(1)
;return
0;}
至於滿分還需要n==m的情況
先判斷環
將環找出
做好標記
再深搜在環上判斷
情況有很多詳見**
#include
#include
using
namespace std;
int n,m,a[
5005][
5005
],lj[
5005]=
,c[5005]=
,s=0
,fs=
1,h[
5005]=
,huan=
0,dd=
0,b[
5009][
5009];
intcmp
(int aa,
int bb)
void
dfs(
int x)
for(
int i=
1;i<=lj[x]
;i++)}
}void
dfs1
(int x)
for(
int i=
1;i<=n;i++)}
}int dyc=
0,huandedazhi=
1000000
,ag=
0,hhl=
0,bxyjz=0;
int zb=
100000
;voidac(
int x)
if(x==huan&&dyc==0)
} huandedazhi=
max(h1,h2)
; zb=huandedazhi;}if
(x==huandedazhi)ag=11;
for(
int i=
1;i<=lj[x]
;i++)if
(h[a[x]
[i]]==1
)else}}
}}intmain()
for(
int i=
1;i<=n;i++
)sort
(a[i]+1
,a[i]
+lj[i]+1
,cmp)
;printf
("1 ");
if(m==n-1)
dfs(1)
;if(m==n)
}
洛谷 P5022 旅行
傳送門 給出乙個有n nn個點的圖,一共有m mm雙向邊,求如何走能使得走到的點按先後順序字典序最小 對於前60 60 60 的資料來說,直接暴力dfs dfsdf s即可而其他的點,則根據基環樹的性質,將每條邊列舉刪去,剩下的肯定是棵樹 進而就得到了類似於60 60 60 的資料的情況 inclu...
洛谷 P5022 旅行
day2就藍題起步不是要我命嗎 目測資料 不都是基環樹和樹嘛?基環樹我不會但是這個樹的貪心不是裸的嗎?大手一揮 這部分分我打定了!int outp 5100 len void dfs int x,int fa void main 光榮地水到了60分 對於剩下的分,我們來好好觀察一下題面 n 5000...
P5022 旅行 基環樹
以後必須學會面向資料程式設計!看半天題目不知道咋寫直接爆搜,結果分少的可憐,還不如直接貪搞個60分。觀察資料,發現圖至多存在乙個環。顯然,如果沒有環,這個題不跟你多bb,直接貪就完事了,線性複雜度。原因十分顯然,一旦你還沒走到底就往回走的話,就走不完整張圖了。有環的話,這題就是個基環樹。根據題意,小...