hdu2363 列舉 最短路 好題

2021-09-05 10:29:22 字數 1106 閱讀 8702

這道題目一開始我的思路就是錯了,前前後後掙扎了n個小時。。。開始的想法是dijkstra,通過二分列舉高度差。但是發現乙個問題,就是因為dijkstra裡面優先選擇的是短的路。我直接二分高度差,是有兩個限制條件。然後就想到spfa,後來仔細想了想還是不行。。。最後用dfs了,才100個點嘛,感覺穩了,結果又tle。。。。。。。

開了別人的題解一眼,恍然大悟。有兩個限制條件(用於選擇)的最短路怎麼能求呢?

所以本題的思路是,列舉任意的兩個點,兩個點的高度分別當作是low和up

另外注意判斷1==n的情況。。。真是無力吐槽了。。。

ac的**

//通過列舉最小邊還是不行 

#include using namespace std;

#define res register int

#define ll long long

#define inf 0x3f3f3f3f

const int maxn=105;

int n,m,h[maxn];

int g[maxn][maxn];

int dis[maxn],vis[maxn];

int low,up;

int result;

struct nodenode[maxn*maxn];

bool operator<(const node a,const node b)

if(!vis[y])}}

} if(0==flag) return false;

else return true;

}int main()

} int a,b,v;

for(res i=1;i<=m;i++)

for(res i=1;i<=n;i++)

} return;

} int main()

} int a,b,c;

for(res i=1;i<=m;i++)else

} printf("%d %d\n",l,result);

} return 0;

}

hdu 2363 最短路 列舉)

思路 和之前hdu上做過的一題很像。就是先求求出所有的高度差,排序後列舉,每次都一次spfa,求出dist,若dist n inf,說明是在最小高度差下找到了最短路徑,直接break即可。另外,發現若不用visited標記的話,時間是其兩倍。orz.以後還是老老實實加visited 吧。1 incl...

hdu 2363 最短路 列舉)

思路 和之前hdu上做過的一題很像。就是先求求出所有的高度差,排序後列舉,每次都一次spfa,求出dist,若dist n inf,說明是在最小高度差下找到了最短路徑,直接break即可。另外,發現若不用visited標記的話,時間是其兩倍。orz.以後還是老老實實加visited 吧。1 incl...

hdu2362(列舉 最短路)

題意 給你n點,m條路,每個點都有不同的高度,題目要求在高度差最小的情況下的最短路徑。開始做這個題目時,我是用二次最短路在做的,回來發現思路錯了,就參考了大牛 恍然大悟。只要對高度公升序排序,然後列舉各個高度差下的最短路徑 include includeusing namespace std def...