社区讨论
求调,谢谢
P1772[ZJOI2006] 物流运输参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miadmkwh
- 此快照首次捕获于
- 2025/11/22 22:20 3 个月前
- 此快照最后确认于
- 2025/11/23 08:00 3 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=25,N=105,INF=4e18;
int n,m,k,e,d,dp[N],cost[N][N],dis[M];
bool able[M][N],cannot[M],fl[M];
vector<pair<int,int>> g[M];
void dij(){
for(int i=1;i<=m;i++) dis[i]=INF;
memset(fl,0,sizeof(fl));
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
dis[1]=0;
q.push({0,1});
while(!q.empty()){
int u=q.top().second;
q.pop();
if(fl[u] || cannot[u]) continue;
fl[u]=1;
for(auto i:g[u]){
int v=i.first,w=i.second;
if(cannot[v]) continue;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push({dis[v],v});
}
}
}
}
signed main(){
cin>>n>>m>>k>>e;
for(int i=1;i<=e;i++){
int x,y,z;
cin>>x>>y>>z;
g[x].push_back({y,z});
g[y].push_back({x,z});
}
cin>>d;
for(int i=1;i<=d;i++){
int p,a,b;
cin>>p>>a>>b;
for(int j=a;j<=b;j++)
able[p][j]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
memset(cannot,0,sizeof(cannot));
for(int t=i;t<=j;t++)
for(int x=1;x<=m;x++)
if(able[x][t]) cannot[x]=1;
dij();
cost[i][j]=dis[m];
}
}
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++){
dp[i]=cost[1][i]*i;
for(int j=i;j>=1;j--)
dp[i]=min(dp[i],dp[j-1]+cost[j][i]*(i-j+1)+k);
}
cout<<dp[n];
return 0;
}
这段代码测试样例时输出极大值,请问是什么原因,已经调了很久了,谢谢。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...