基本思路:
一開始確實沒什麼思路,因為覺得怎麼著都會超時,然後看一下資料範圍,呵,怎麼都不會超時。
思路:1.看到能改變線路,想到可以用以下區間dp,區間dp的話,先列舉長度,列舉開始位置,然後列舉中間點 dp[i][j]=min(dp[i][j],dp[i][z]+dp[z][j]+k);
2.然後每段時間最短路究竟是多少,然後因為不會超時,所以就二重迴圈列舉就好了
(ps:這裡要說明一下給自己提個醒:
spfa就是佇列優化的迪傑斯特拉,然後的話vis陣列每次出乙個就置零乙個,如果不置零是錯的
堆優化的迪傑斯特拉自己之前也加vis,而且每次出乙個的話不置零,不會錯,因為vis陣列是不必要的
所以以後寫的話一般就寫spfa好了,堆優化的迪傑斯特拉的話略難寫一點,而且兩者速度也差不多
普通的迪傑斯特拉的話還是要置零的,因為比起spfa就是優化在了佇列
**如下:
#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 100+10;
int head[maxn],cnt;
struct edgeedge[maxn<<4];
ll tim[maxn][maxn],f[maxn][maxn];
bool flag[maxn][maxn],block[maxn],vis[maxn];
int dis[maxn];
int n,m,k;
void add(int u,int v,int w)
int spfa(int s,int e)}}
while(!q.empty())}}
vis[u]=false;
}return dis[m];
}void dp()}}
}int main()
int q;
scanf("%d",&q);
for(int i=1;i<=q;i++)
}for(int i=1;i<=n;i++)
}dp();
cout
}
bzoj1003物流運輸
物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但...
bzoj 1003 物流運輸
description 物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨...
bzoj 1003 物流運輸
我用的是dijkstra dp 當然是參考大佬們的啦 dijkstra用來進行預處理,處理出dis start time end time start time,end time 時間段的1 m的最短路,其實很簡單,我們首先要把在某個時間段不能裝卸貨物的碼頭給預處理出來,可以用字首和來處理,具體看 ...