【题解】[NOI2019Route](70分)
占坑
做法是拆掉所有式子,拆完式子看一下,如果A=0,发现边被分为了终点走向n的边和不走向n的边。所以边就有了新的边权,并且可以相加。然后通过网络流建模的套路建模使得满足时间的限制,然后由于有负边,所以跑spfa,这里60分。然后还有两个点是一条链,送10分。
先放代码,还没测,可能会爆零。交上去的爆零了因为没写freopenQAQ
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
namespace sol1{
const int maxn=3e5+5;
struct E{
int fr,to,st,ed;
E(){to=fr=st=ed=0;}
E(const int&a,const int&b,const int&c,const int&d){
fr=a;to=b;st=c;ed=d;
}
}data[maxn];
ll w[maxn];
int arc[maxn];
int cnt;
int nodecnt;
typedef pair < ll , int > P;
//priority_queue< P , vector<P>,greater <P> > q;
queue<P> q;
bool in[maxn<<2];
vector < int > fr[maxn],to[maxn];
vector < P > e[maxn<<2];
inline bool cmp(const int&a,const int&b){
return data[a].ed>data[b].ed;
}
int n,m,A,B,C;
inline bool cmp2(const int&a,const int&b){
return data[a].st>data[b].st;
}
ll d[maxn<<2];
inline ll spfa(){
for(register int t=1;t<maxn<<2;++t) d[t]=2e18;
d[0]=0;in[0]=1;
q.push(make_pair(0,0));
while(!q.empty()){
P cur=q.front();
q.pop();in[cur.second]=0;
for(register int t=0,edd=e[cur.second].size();t<edd;++t){
//cout<<d[e[cur.second][t].second]<<' '<<d[cur.second]+e[cur.second][t].first<<endl;
if(d[e[cur.second][t].second]>d[cur.second]+e[cur.second][t].first){
d[e[cur.second][t].second]=d[cur.second]+e[cur.second][t].first;
if(!in[e[cur.second][t].second])
q.push(make_pair(d[e[cur.second][t].second],e[cur.second][t].second)),in[e[cur.second][t].second]=1;
}
}
}
return d[m+1];
}
inline void add(const int&fr,const int&to,const ll&w){
//cout<<"fr="<<fr<<' '<<"to="<<to<<" w="<<w<<endl;
e[fr].push_back(make_pair(w,to));
}
inline int init(const int&a,const int&b,const int&c,const int&d1,const int&e1){
n=a;m=b;A=c;B=d1;C=e1;
nodecnt=n;
for(register int t=1,x,y,p,q;t<=m;++t){
x=qr();y=qr();p=qr();q=qr();
//cout<<x<<' '<<y<<' '<<p<<' '<<q<<endl;
data[t]=E(x,y,p,q);
w[t]=C+1ll*B*p+1ll*A*p*p;
if(y!=n) w[t]=w[t]+1ll*A*q*q-1ll*B*q;
if(y==n) w[t]=w[t]+0ll+q;
fr[x].push_back(t);to[y].push_back(t);
if(x==1) add(0,t,w[t]);
if(y==n) add(t,m+1,0);
}
for(register int t=1;t<=n;++t){
//if(fr[t].empty()||to[t].empty())continue;
sort(to[t].begin(),to[t].end(),cmp);
sort(fr[t].begin(),fr[t].end(),cmp2);
int k=0;/*
cout<<t<<' '<<fr[t].size()<<' '<<to[t].size()<<endl;
cout<<"fr=";
for(auto f:fr[t])
cout<<f<<" ";
putchar('\n');
cout<<"to=";
for(auto f:to[t])
cout<<f<<" ";
putchar('\n');
*/
for(register int i=0,edd=to[t].size(),ed2=fr[t].size();i<edd;++i){
if(i<edd-1)add(to[t][i+1],to[t][i],0);
while(k<ed2&&data[fr[t][k]].st>=data[to[t][i]].ed) add(to[t][i],fr[t][k],w[fr[t][k]]),++k;
}
}
cout<<spfa()<<endl;
return 0;
}
}
int main(){
freopen("route.in","r",stdin);
freopen("route.out","w",stdout);
int a=qr(),b=qr(),c=qr(),d=qr(),e=qr();
if(a<=100&&b==a-1&&c!=0){
ll A=c,B=d,C=e;
ll ans=1ll*a*C;
ll t1=0,t2=0,t3=0;
for(register int t=1;t<=b;++t){
qr();qr();t1=qr();t2=qr();
ans+=B*(t1-t3)+A*(t1-t3)*(t1-t3);
t3=t2;
}
cout<<ans+t3<<endl;
return 0;
}
return sol1::init(a,b,c,d,e);
return 0;
}
【题解】[NOI2019Route](70分)的更多相关文章
- 洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】
题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的,区间右边的人往区间最右的那些空位跑,区间左边的人往区间最左的那些空位跑 找到这些空 ...
- 「PKUSC2018」星际穿越 (70分做法)
5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 27 Solved: 11[Submit][Status] ...
- 洛谷P1979 华容道(70分 暴力)
P1979 华容道 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少 ...
- 洛谷P1081 开车旅行70分
https://www.luogu.org/problem/show?pid=1081 太遗憾了明明写出来了,却把最小值初始值弄小了,从第二个点开始就不可能对了.70分! #include<io ...
- 华容道 noip2013 70分搜索
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- ccf 201712-4 行车路线(70分)
ccf 201712-4 行车路线 解题思路: 首先Dijkstra是基于贪心算法的,即每一次作出的选择都具有贪心选择性.此题由于有“如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2 ...
- Cogs 1264. [NOIP2012] 开车旅行(70分 暴力)
1264. [NOIP2012] 开车旅行 ★★☆ 输入文件:drive.in 输出文件:drive.out 简单对比时间限制:2 s 内存限制:128 MB [题目描述] 小A 和小 ...
- 【NOI2016】优秀的拆分 题解(95分)
题目大意: 求一个字符串中形如AABB的子串个数. 思路: 用哈希做到O(1)判断字符串是否相同,O($n^2$)预处理,ans[i]为开头位置为i的形如AA的子串个数.再用O($n^2$)枚举出AA ...
- ACM: 限时训练题解-Runtime Error-二分查找
Runtime Error Bahosain was trying to solve this simple problem, but he got a Runtime Error on one ...
随机推荐
- Python深入:02浅拷贝深拷贝
对象赋值实际上是简单的对象引用.也就是说当你创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 假设想创建一对小夫妻的通用档案,名为person. ...
- LOJ 10239 有趣的数列
LOJ 10239 有趣的数列 首先可以将奇数视作入栈,偶数视作出栈,那么它是卡特兰数,其实打表也能看出来,而且好像可以用dp? 不过这道题的难点不在这里,p不是素数,所以不能用求逆元来做,不过前50 ...
- Jquery FormData文件异步上传 快速指南
网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...
- oracle强制索引失效
如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它,检索出的记录数量少) . 举例: SELECT ENAME FROM EMP WHERE EMPNO = 79 ...
- sleep usleep nanosleep alarm setitimer使用
sleep使用的是alarm之类的定时器,定时器是使得进程被挂起,使进程处于就绪的状态. signal+alarm定时器 alarm参数的类型为uint, 并且不能填0 #include <st ...
- There is no getter for property named 'XXX' in 'class java.lang.String'
实验环境:spring boot+mybitis 由于采用的不带映射xml文件的模式,因此 方法1: 把#{xxx}修改为 #{_parameter} 即可 select count(*) from ...
- git之本地仓库关联远程仓库
首先新建一个github respository 然后在自己本地新建一个maven项目,里面写点东西 如下图,将自己的项目所在地设置为本地git仓库 将本地仓库与远程关联,首先获取远程仓库的地址,点击 ...
- 关于DOM的一些基础问题
什么是 DOM? DOM 是一项 W3C (World Wide Web Consortium) 标准,全称是文档对象模型(Document Object Model). DOM 定义了访问文档的标准 ...
- java Class中得到构造方法Constructor、方法Method、字段Field
常用方法: Constructor类用于描述类中的构造方法: Constructor<T> getConstructor(Class<?>... parameterTypes) ...
- 2018-9-20-断点调试-Windows-源代码
title author date CreateTime categories 断点调试 Windows 源代码 lindexi 2018-09-20 17:37:55 +0800 2018-05-1 ...