LGOJ1606 白銀蓮花池

2022-05-26 06:48:08 字數 1351 閱讀 9125

為了讓奶牛們娛樂和鍛鍊,農夫約翰建造了乙個美麗的池塘。

這個長方形的池子被分成了m行n列個方格(1≤m,n≤30)

一些格仔是堅固得令人驚訝的蓮花,還有一一些格仔是岩石,其餘的只是美麗、純淨、湛藍的水

貝西正在練習芭蕾舞,她站在一朵蓮花上 ,想跳到另一朵蓮花上去,她只能從一一朵蓮花跳到另-朵蓮花上

既不能跳到水裡,也不能跳到岩石上,貝西的舞步很像象棋中的馬步,最多時,西會有八個移動方向可供選擇

約翰一直在**貝西的芭蕾練習,發現她有時候不能跳到終點,因為中間缺了一些荷葉

於是他想要新增幾朵蓮花來幫助貝西完成任務

一貫節儉的約翰只想新增最少數星的蓮花。當然,蓮花不能放在石頭上

請幫助約翰確定必須要新增的蓮花的最少數量,以及有多少種放置這些蓮花的方法

從起點,和水,向每乙個可以放荷葉的位置建邊

spfa跑最短路的時候,順便搞一下最短路計數

跑最短路的時候是點權,而要求的是邊權

所以把答案減一即可

87分改了乙個多小時,結果是dfs裡面沒有判vis...

**:

#include#define ll long long

#define n 1000005

#define inf 123456789123456789

using namespace std;

int n,m,u,v,xx1,yy1,xx2,yy2;

int a[35][35],id[35][35];

struct edge

edge[n<<1];

int cnt=0,head[n];

inline void add_edge(int from,int to)

templateinline void read(t &res)

int dx[8]=;

int dy[8]=;

bool vis[35][35];

void dfs(int id,int x,int y) }}

int s,t;

bool vis[n];

ll dis[n],cont[n];

queueq;

void spfa()

}else if(dis[v]==dis[u]+1) cont[v]+=cont[u];

} }}int main()

} for(register int i=1;i<=n;++i)

}} s=id[xx1][yy1];

t=id[xx2][yy2];

spfa();

if(dis[t]else puts("-1");

return 0;

}

1 6 06 校門外的樹

描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點...

LGOJ 3384 樹鏈剖分

如題,已知一棵包含n個結點的樹 連通且無環 每個節點上包含一 個數值,需要支援以下操作 操作1 格式 1 x y z表示將樹從x到y結點最短路徑上所有節點的值都加上z 操作2 格式 2 x y表示求樹從x到y結點最短路徑上所有節點的值之和 操作3 格式 3 x z表示將以為根節點的子樹內所有節點值都...

ssl1606 選課 拓撲排序

description 大學裡實行學分。每門課程都有一定的學分,學生只要選修了這門課並考核通過就能獲得相應的學分。學生最後的學分是他選修的各門課的學分的總和。每個學生都要選擇規定數量的課程。其中有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如,資料結構...