比赛 |
2024暑期C班集训1 |
评测结果 |
AAAAAAAATTTETTETTTTT |
题目名称 |
熙熙攘攘、我们的城市 |
最终得分 |
40 |
用户昵称 |
AeeE5x |
运行时间 |
11.745 s |
代码语言 |
C++ |
内存使用 |
103.64 MiB |
提交时间 |
2024-07-01 10:22:13 |
显示代码纯文本
#include<iostream>
#include<queue>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
int n,m;
struct nod{int nd,val,numb;};
struct pce{int nd,val,nv;long long lasum,summ;};
vector<nod> map[1000010];
int ed[1000010];
int ans=1e9+1;
long long anss=0;
void f(){
queue<pce> que;
que.push((pce){1,0,-1,0,0});
ed[1]=0;
while(!que.empty()){
pce fr=que.front();
for(int i=0;i<map[fr.nd].size();i++){
pce p={};
p.nd=map[fr.nd][i].nd;
p.val=fr.val+map[fr.nd][i].val;
p.nv=map[fr.nd][i].numb;
if(p.nv!=fr.nv&&fr.nv!=-1) p.summ=fr.summ+fr.lasum*long(fr.lasum),p.lasum=map[fr.nd][i].val;
else p.summ=fr.summ,p.lasum=fr.lasum+map[fr.nd][i].val;
if(p.val>ed[p.nd]) continue;
ed[p.nd]=p.val;
if(p.nd==n){
p.summ+=p.lasum*long(p.lasum);
if(p.val<ans) ans=p.val,anss=p.summ;
else if(p.val==ans) anss=max(anss,p.summ);
}else que.push(p);
}
que.pop();
}
}
int main(){
freopen("Wrong_world.in","r",stdin);
freopen("Wrong_world.out","w",stdout);
memset(ed,0x3f,sizeof ed);
scanf("%d%d",&n,&m);
while(m--){
int p;scanf("%d",&p);
int nst;scanf("%d",&nst);
while(p--){
int t,v;scanf("%d%d",&t,&v);
map[nst].push_back((nod){v,t,m});
nst=v;
}
}
f();
printf("%d %lld",ans,anss);
return 0;
}