Luogu p2103 道路值守 題解

2021-08-28 16:05:35 字數 1251 閱讀 1287

題目鏈結

這道題很明顯是要用floyd的,所以肯定先用floyd跑一遍,求出任意兩點之間的最路徑。這個資料範圍擺明了讓你o(n^3)去過的,於是我們不難發現這道題可以dp來統計答案。

跑完floyd後,我們去列舉所有於j有連邊且在i到j的最短路上的k,每找到乙個,就將wzy[j]加1。統計完後,我們再去找所有在i到j最短路上的點(不需要連邊),每找到乙個,就將i和j這兩個點之間的答案加上wzy[k]。因為我們不難發現,如果k在i到j的最短路上,那麼在i到k最短路上的點,也在i到j的最短路上。這就完成了dp。

具體**如下

#include

using

namespace std;

const

int inf=int_max/3;

long

long a[

510]

[510

],n,m,f[

510]

[510

],wzy[

510]

,t[510][

510]

;inline

intread()

inline

void

write

(int x)

if(x>9)

write

(x/10);

putchar

(x%10

+'0');

}int

main()

for(

int i=

1;i<=n;i++

)a[i]

[i]=f[i]

[i]=0;

for(

int k=

1;k<=n;k++

)for

(int i=

1;i<=n;i++)if

(i!=k)

for(

int j=

1;j<=n;j++

)for

(int i=

1;i<=n;i++)}

for(

int j=

1;j<=n;j++)}

for(

int i=

1;i1;i++)}

write

(t[n-1]

[n])

;putchar

('\n');

return0;

}

luogu P2296 尋找道路 題解

題意 給定起點終點,找一條從起點到終點的最短路徑使路上的每個點都能有路徑到達終點。我們先反著建一遍圖,然後從終點開始bfs一遍圖,標記所有終點可以到達的點。然後再列舉一遍點,如果這個點是終點沒法到達的點,那麼再列舉這個點所能連線的所有點,如果這些點是終點可以到達的,那麼這些點就是不符合條件的。最後在...

luogu P1070 道路遊戲 DP

luogu p1070 道路遊戲 題目描述 小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有 n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這 n 個機械人工廠編號為1 n,因為馬路是環形的,所以第 n 個機械人工廠和第 1 個機...

luogu P6239 奇怪的道路

奇怪的道路 我看不出來是狀壓的狀壓 好吧,其實看到k的範圍應該去往狀壓方面想的。然後,題目中說 任何乙個城市都與恰好偶數條道路相連 0也被認為是偶數 所以,奇偶,兩種狀態可以用0,1來表示,那就妥妥的狀壓了。設 dp 表示當前已經考慮了i座城市,j條道路,當前狀態為sta的方案數。用0表示奇數,1表...