NKOI 1120 最短路默寫

2021-07-11 02:25:20 字數 1595 閱讀 1938

最短路默寫

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  3

1 2 5

1 3 2

3 2 1

1 2

sample output

3
hint

注:所有資料都不超過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

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]);

}

除了以上兩種最短路求法以外,還有bellman和spfa等實用的方案,就不一一貼上來了

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 有太多的工作要做...