n個城市,標號從0到n-1,m條道路,第k條道路(k從0開始)的長度為2^k,求編號為0的城市到其他城市的最短距離
第一行兩個正整數n(2<=n<=100)m(m<=500),表示有n個城市,m條道路接下來m行兩個整數,表示相連的兩個城市的編號
n-1行,表示0號城市到其他城市的最短路,如果無法到達,輸出-1,數值太大的以mod 100000 的結果輸出。示例1
4 41 22 3
1 30 1
8由於2^k可以非常大,如果單純最短路套模板,在比較路徑大小的地方就超範圍了。而2^k是有規律的911
每次加入的路徑都比之前加入的所有路徑之和大1,那麼如果本來輸入兩端a,b。a與b已經連通了,那
就沒必要加入這條新路徑了,但如果a,b分別屬於兩個連通圖,那麼他們分別的點到對方的點必然會通
過新加入的路徑。所以就維護乙個連通圖各個點的最短距離,然後更新就可以了
#include #include #include using namespace std;
const int mod=1e5;
const int maxn=1e2;
int pra[maxn],rank[maxn],dis[maxn][maxn];
int finding(int num);
void init(int n);
int main()
}if(rank[fa]pra[fa]=fb;
else
}for(int i=1; iprintf("%d\n",dis[0][i]);
}return 0;
}void init(int n)
int finding(int num)
hdu5361 最短路 並查集
題意 有n個點排成一排,編號從1到n,每個點可以到自己 l,r 距離的位置,花費c,問一號店到其他點的最小花費 pragma comment linker,stack 102400000,102400000 include include include include include includ...
並查集 牛客1080 B
tokitsukaze有n個數,需要按順序把他們插入雜湊表中,雜湊表的位置為0到n 1。插入的規則是 剛開始雜湊表是空的。對於乙個數x,在雜湊表中,如果 x mod n 的位置是空的,就把x放在 x mod n 的位置上。如果不是空的,就從 x mod n 往右開始找到第乙個空的位置插入。若一直到n...
HDU5361In Touch 最短路 並查集
題目描述 有n個傳送機排成一排,編號從1到n,每個傳送機都可以把自己位置的東西傳送到距離自己 l,r 距離的位置,並且花費c,問從1號傳送機到其他傳送機的最小花費是多少 思路 從第乙個點開始更新,更新過的點從未被更新的點中除去,因為在dijkstra裡 每次取出的都是最小的distance,所以更新...