時間限制: 1 s
空間限制: 32000 kb
題目等級 : 鑽石 diamond
題解某鄉有n個村莊(1輸入描述 input description
村莊數n和各村之間的路程(均是整數)
輸出描述 output description
最短的路程
樣例輸入 sample input
0 2 1
1 0 2
2 1 0
樣例輸出 sample output
資料範圍及提示 data size & hint
本題可用最短路思想、搜尋來解決,但是可能無法通過一組極限資料(且效率較低)。建議按樹狀dp考慮!
分類標籤 tags 點此展開
動態規劃
最小生成樹
圖論ac**1:
/*不會什麼樹形dp,我做的是spfa(其實floyed就可以)+深搜+剪枝
首先將邊反向,spfa處理所有點到1的距離,以備剪枝使用
然後深搜得到答案
剪枝:利用spfa得到的距離,當當前的dis+(n-t)*minn+f[x]>ans時,剪枝
(minn是矩陣中的最短距離,n-t是還有幾步可以遍歷完所有的村莊)
*/#include
#include
#include
#include
#define m 20
#define inf 3000000
using
namespace
std;
int map[m][m],f[m],n,ans=inf,min1=inf;
inta2[m][m];
bool
vis[m];
queue
q;intread()
while(c>='
0'&&c<='9')
return num*flag;
}void dfs(int x,int t,int
dis)
for(int i=1;i<=n;i++)
if(!vis[i])
}void
spfa()}}
}int
main()
spfa();
memset(vis,
0,sizeof
(vis));
vis[
1]=1
; dfs(
1,1,0
); printf("%d
",ans);
return0;
}
ac**2:
#include#includeusing
namespace
std;
#define n 51
int n,tr[n][n],m=0x7fffffff
;bool
vis[n];
void run(int p,int d,int
s)
for(r=1;r<=n;r++)
}
}
intmain()
ac**3:
#include#include#include
using
namespace
std;
int f[20],map[16*16][16*16
];int n,a,b,c,sum=0x7f7f7f7f
;void dfs(int s ,int dis,int
k)
for(int i=1;i<=n;i++)
}}int
main()
2596 售貨員的難題
時間限制 1 s 空間限制 32000 kb 題目等級 鑽石 diamond 某鄉有n個村莊 1輸入描述 input description 村莊數n和各村之間的路程 均是整數 輸出描述 output description 最短的路程 樣例輸入 sample input 0 2 1 1 0 2 2...
售貨員的難題(codevs 2596)
題目描述 description 某鄉有n個村莊 1輸入描述 input description 村莊數n和各村之間的路程 均是整數 輸出描述 output description 最短的路程 樣例輸入 sample input 0 2 1 1 0 2 2 1 0 樣例輸出 sample outpu...
售貨員的難題
售貨員的難題 5000 ms 65535 kb 675 3441 tags 動態規劃 某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村...