為了讓奶牛們娛樂和鍛鍊,農夫約翰建造了乙個美麗的池塘。
這個長方形的池子被分成了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 大學裡實行學分。每門課程都有一定的學分,學生只要選修了這門課並考核通過就能獲得相應的學分。學生最後的學分是他選修的各門課的學分的總和。每個學生都要選擇規定數量的課程。其中有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如,資料結構...