最短路默寫
time limit:10000ms memory limit:65536k
total submit:676 accepted:396
case time limit:1000ms
description
有一無負權有向圖。求指定兩點間的最短路徑。
input
輸入:第一行,兩個數字n和m,表示n個頂點,m條邊
接下來的m行,每行三個整數,分別表示邊的起點、終點和邊的長度
最後一行 兩個整數 x y 表示求從點x到點y的最短路徑
output
輸出:一行,乙個整數,最短路徑長度
sample input
3 3sample output1 2 5
1 3 2
3 2 1
1 2
3hint
注:所有資料都不超過100
source
這裡用兩種經典且常用方法解決這道題
首先是dijkstra:
#include
#define inf 999999999
int n,m,map[101][101];
int dis[101],mark[101];
void dijkstra(int x) //求從x點出發到其他所有點的最短距離
mark[x]=true; //演算法執行過程
do}while(k>0); //若k==0表示全部點都被討論過了
}int main()
for(i=1;i<=m;i++)
scanf("%d%d",&x,&y);
dijkstra(x);
printf("%d",dis[y]);
}
然後是floyd:
#include#include#define inf 999999999除了以上兩種最短路求法以外,還有bellman和spfa等實用的方案,就不一一貼上來了using namespace std;
int n,m,s[101][101];
int main()
int x,y;
scanf("%d%d",&x,&y);
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
s[i][j]=min(s[i][j],s[i][k]+s[k][j]);
printf("%d",s[x][y]);
}
NKOI 防守馬克
題目略 我最早其實想的貪心,力量從大到小,從下到上放置奶牛,但是如果有乙隻力量小的奶牛非常重,就矛盾。狀壓dp基礎題,但是開始我一直沒有想到運用列舉頂端的奶牛進行狀態轉移。我發現其實題目中物件增長的方式可以給狀態轉移帶來啟發,比如這裡的奶牛就是乙隻只疊上去的嘛。另外我還發現其實驗證dp是否可行就是看...
1120 蠟燭 題解
時間限制 1 sec 記憶體限制 64 mb 題目描述 奶牛bessie有n根蠟燭,第i根蠟燭的長度是h i bessie最近剛上完小學,只會加減法。它想知道它的n根蠟燭最多能用多少個晚上。由於bessie比較膽小,因此它第乙個晚上只點燃一根蠟燭,第二個晚上點燃兩根蠟燭,第三個晚上點燃三根蠟燭,第i...
NKOI 1349 工作安排
uasco 2009 open gold 2 工作安排 time limit 10000ms memory limit 65536k total submit 63 accepted 43 case time limit 1000ms description farmer john 有太多的工作要做...