求助,找了2小时,好像是越界,数据一大全错
查看原帖
求助,找了2小时,好像是越界,数据一大全错
531811
luoguo0921楼主2022/10/16 17:11
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll lj[101][101];
bool pd[101];
ll f[101];
vector<ll> l[101];
vector<ll> r[101];
ll ans[101][25];
int a,b,d,e;
ll c;
ll dij() {
	bool vis[101];
	ll dis[101];
	memset(vis,0,sizeof(vis));
	for(int i=1; i<=100; i++)
		dis[i]=999999999;
	dis[1]=0;
	for(int i=1; i<=b; i++) {
		int cnt=0;
		for(int j=1; j<=b; j++)
			if(vis[j]==0&&dis[cnt]>dis[j])
				cnt=j;
		vis[cnt]=1;
		if(pd[cnt])continue;
		for(int j=1; j<=b; j++)
			if(j!=cnt&&lj[cnt][j]!=-1&&dis[j]>dis[cnt]+lj[cnt][j]&&!pd[j]) {
				dis[j]=dis[cnt]+lj[cnt][j];

			}

	}
	return dis[b];
}
int main() {

	cin>>a>>b>>c>>d;
	int u=a;
	memset(lj,-1,sizeof(lj));
	for(int i=1; i<=d; i++) {
		ll x,y,z;
		cin>>x>>y>>z;
		lj[x][y]=z;
		lj[y][x]=z;
	}
	cin>>e;
	for(int i=1; i<=e; i++) {
		ll x,y,z;
		cin>>x>>y>>z;
		l[x].push_back(y);
		r[x].push_back(z);
	}
	for(int i=1; i<=u; i++) {
		for(int j=i; j<=u; j++) {
			memset(pd,0,sizeof(pd));
			for(ll t=1; t<=b; t++)
				for(ll y=0; y<l[t].size(); y++)
					if(l[t][y]>=i&&l[t][y]<=j||r[t][y]>=i&&r[t][y]<=j)
						pd[t]=1;
			ans[i][j]=dij();
		}
	}
	for(int i=1; i<=u; i++) {
		f[i]=i*ans[1][i];
		for(int j=i-1; j>=0; j--)
			f[i]=min(f[i],f[j]+ans[j+1][i]*(i-j)+c);
	}
cout<<f[u];
}
2022/10/16 17:11
加载中...