Luogu P1144 最短路計數

2022-03-16 20:22:02 字數 832 閱讀 5783

這道題先跑乙個最短路,然後在用記憶化搜尋搜出最短路條數。

開乙個$dis$陣列存最短路長度,開乙個$ans$陣列存答案。

搜到乙個節點$v$,尋找它能到達的每個節點$u$,如果$dis[u]+1==dis[v]$,說明用最短路的走法走到$u$後,直接走到$v$就都是$1$到$v$的一條合法最短路。

此時,$ans[v]=ans[u]+ans[v]$.

寫記憶化搜尋的時候,不要算過了還遞迴進去再返回,那樣會tle。

此外,把記憶化放進輸出是乙個很巧的方法。

#include#define n 1000010

#define m 2000010

#define mod 100003

#define inf 0x3f3f3f3f

using namespace std;

int n,m,cnt;

int head[m],dis[n],ans[n];

bool vis[n];

struct node e[m*2];

void addedge(int u,int v) ;

head[u]=cnt;

return;

}void read()

return;

}void init()

return;

}void spfa()

} }return;

}int calc(int x)

} return ans[x];

}void print()

return;

}int main()

luogu P1144 最短路計數

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每行乙個非負整數,第i行輸...

Luogu P1144 最短路計數

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每行乙個非負整數,第i行輸...

C P1144 最短路計數

題目 p1144 最短路計數 他們居然說是水題,看來我還是太low了。用spfa求最短路,然後記錄有多少個相同的到該點的最短路。你忽略了重邊了嗎?include include include using namespace std const int maxn 0x7fffffff 3 int n...