TLE第19号点,有稍微改动的办法么各位dalao
查看原帖
TLE第19号点,有稍微改动的办法么各位dalao
247831
CHIS_fy楼主2020/8/4 08:11
//Head and Prepare
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define ull unsigned long long
#define il inline
#define maxm 200010
#define maxq 1010
#define maxn 100010
#define inf 0x3fffffff
#pragma GCC optimize(3)
#pragma GCC optimize(2)
#pragma GCC optimize("inline")
#define re register
using namespace std;
il int read()
{
	int x=0;char c=getchar();
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x;
}
//coding Start
struct Line
{
	int EndStation,StartTime,EndTime;
};
vector<Line> station[maxn];
inline bool cmp(Line a,Line b)
{
	return a.StartTime>b.StartTime;
}
int n,m,A,B,C;
int dp[maxn][1001];//到某站,某时间
inline int Figdety(int x,int y)
{
	return A*(y-x)*(y-x)+B*(y-x)+C;
}
void Dp(int u,int time,int figdety)
{
	if(figdety>dp[u][time])return;
	dp[u][time]=figdety;
	for(re int i=0;i<station[u].size();i++)
	{
		int v=station[u][i].EndStation;
		if(station[u][i].StartTime<time)break;
		int F=Figdety(time,station[u][i].StartTime);
		Dp(v,station[u][i].EndTime,figdety+F);
	}
}
void Input()
{
	n=read(),m=read(),A=read(),B=read(),C=read();
	for(re int i=1,x,y,p,q;i<=m;i++)
	{
		x=read(),y=read(),p=read(),q=read();
        station[x].push_back((Line){y,p,q});
	}
}
int main()
{
	Input();
   for(re int i=1;i<=n;i++)
   	sort(station[i].begin(),station[i].end(),cmp);
   for(re int i=1;i<=n;i++)
   	for(re int j=0;j<=1000;j++)
   		dp[i][j]=inf;
    Dp(1,0,0);
    int ans=inf;
    for(re int i=0;i<=1000;i++)
    	ans=min(ans,dp[n][i]+i);
    cout<<ans<<endl;
    return 0;
}
2020/8/4 08:11
加载中...