首先可以看出這是一道求最短路的題目,但暴力建圖最多n2 條邊,所以考慮建圖優化
對於p>sqrt(n) 的青蛙可以直接暴力建,最多n*sqrt(n) 條邊
對於p
1view code#define maxn 4000010ul
2 #include 3 #include 4 #include 5 #include 6
7using
namespace
std;89
int n, m, t, inf, s, t, d[maxn], dis[maxn], mp[30010][175
];10
bool
ins[maxn];
1112
struct
edge sg[maxn<<2
];15
16void add(int x, int y, int
z) , d[x] = t ++;
18return;19
}2021void spfa(int
x) 35}36
}37return;38
}3940int
main()
4748
for(int i = 0 ; i < n ; ++i) 53}
54for(int i = 0, b, p ; i < m ; ++i) 63}
64spfa(s);
65if(dis[t]==inf) printf("-1"
);66
else printf("%d"
, dis[t]);
67return0;
68 }
APIO 2015 耶加達的摩天樓
題目鏈結 演算法 考慮將每個 doge 向其所能到達的樓連邊 直接spfa求單源最短路可以獲得57分 那麼 怎樣拿到滿分呢?我們發現這張圖的邊的數量達到了nm的數量級 考慮分塊 將每個點拆成sqrt n 個點 將每個pi sqrt n 的點向 bi pi 連邊 這樣的邊不會超過n sqrt n 條 ...
題解 耶加達的摩天樓 APIO2015
分塊思想,機智的建圖。1.n min sqrt n 100 設乙個玄學限制,跑得會快很多。2.spfa 不要加 lll 也不要加 slf 優化!千萬不要加!不然九十八!我寫了發 spfa 時間略卡。可能 dijkstra 在這道題會更優秀一些吧 1 include 2 include 3 inclu...
AOIP 2015 耶加達的摩天樓
qwq 其實就是個最短路啊,然後發現建的邊最多會有n2 n 2條 所以我們考慮用分塊的思想來優化建圖。pi sqrt n 暴力加入每一條邊,每次最多sqrt n 條邊。pi sqrt n 對於每個點新增sqrt n 個輔助點,這裡可以理解成一棟樓有許多層,每一層一步能走的範圍都不同,然後每一層分別連...