比赛 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;
}