題意:有n個點排成一排,編號從1到n,每個點可以到自己[l, r]距離的位置,花費c,問一號店到其他點的最小花費
**:#pragma comment(linker, "/stack:102400000,102400000")
#include #include #include #include #include #include #include #include using namespace std;
const long long inf=0x3f3f3f3f3f3f3f3f;
typedef pairp;
int v;
int l[500005],r[500005],par[500005];
long long d[500005],w[500005];
void init(int n)
}int find(int x)
void unite(int x,int y)
struct edge;
void dijkstra(int s)
unite(j,j+1);}}
}}int main(){ //因為每個點所連的邊的權值都相等,因此每經過
int i,j,t; //乙個點一定不會在經過第二次,所以問題就變為
scanf("%d",&t); //如何在最短路時直接找到沒有更新過的點
while(t--){
scanf("%d",&v);
for(i=1;i<=v;i++)
scanf("%d",&l[i]);
for(i=1;i<=v;i++)
scanf("%d",&r[i]);
for(i=1;i<=v;i++)
scanf("%i64d",&w[i]);
init(v);
dijkstra(1);
for(i=1;i
HDU 5361 最短路變形
點選開啟鏈結 題意 給了n個點排成一行,每兩個距離為1,然後對於每個點來說它有個l和r,意思是距離在l到r中間的所有點它都能到達,費用是c,問從小出發的單源所有的點的距離 思路 看了網上神犇的題解有了點思路,因為每個點出去的費用都是相同的,而且費用的值大於0,那麼1點直接到達的所有點的最短路就不需要...
HDU5361In Touch 最短路 並查集
題目描述 有n個傳送機排成一排,編號從1到n,每個傳送機都可以把自己位置的東西傳送到距離自己 l,r 距離的位置,並且花費c,問從1號傳送機到其他傳送機的最小花費是多少 思路 從第乙個點開始更新,更新過的點從未被更新的點中除去,因為在dijkstra裡 每次取出的都是最小的distance,所以更新...
HDU3938 並查集 並查集
先按邊權值排個序,每次加入一條邊,用並查集,關鍵看懂題。include include include include using namespace std const int maxn 10010 int n,m,q struct edge edges maxn 5 inline int cmp...