wa 掉了,能过样例,人已崩溃
查看原帖
wa 掉了,能过样例,人已崩溃
133116
Xhesika_Frost楼主2020/8/6 08:37
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
using namespace std;
int s,t;
int n,e;
int x,y;
double r,d;
int fa[201];
double dis[201];
int head[201];
int b=1;
int lu[201];
double ht[201];
bool vis[201];
struct dj{
    int v;
    int id;
    friend bool operator < (dj xxx,dj yyy){
        return xxx.v>yyy.v;
    } 
};
dj too,tooo;
priority_queue <dj> q;
struct ee{
    int to;
    int ne;
    int f;
    double t;
    double  l;
}e1[20001],e2[20001];
int p;
void add(int f,int to,double t,double l){
    p++;
    e1[p].ne=head[f];
    e1[p].to=to;
    e1[p].f=f;
    e1[p].t=t;
    e1[p].l=l;
    head[f]=p;
}
void add2(int f,int to,double t,double l){
    p++;
    e2[p].f=f;
    e2[p].ne=head[f];
    e2[p].to=to;
    e2[p].t=t;
    e2[p].l=l;
    head[f]=p;
}
bool cmp (ee xx,ee yy){
    return xx.t<yy.t;
}
int find(int x){
    return fa[x]==x? x: fa[x]=find(fa[x]);
}
void sp(){
    for(int i=1;i<=n;++i){
        dis[i]=0x3f3f3f3f;
    }
    dis[s]=0;
    lu[s]=s;
    too.id=s;
    too.v=0;
    q.push(too);
    while(!q.empty()){
      //cout<<q.top().id<<" ";
      //cin>>x;
        too=q.top();
        q.pop();
        if(vis[too.id]) continue;
        vis[too.id]=1;
        for(int i=head[too.id];i;i=e2[i].ne){
        //  cout<<dis[e2[i].to]<<"b ";
            if(dis[e2[i].to]>dis[too.id]+e2[i].l){
        //      cout<<342;
                dis[e2[i].to]=dis[too.id]+e2[i].l;
                lu[e2[i].to]=too.id;
                ht[e2[i].to]=max(ht[too.id],e2[i].t);
                tooo.id=e2[i].to;
                tooo.v=dis[e2[i].to];
                q.push(tooo);
            }
        }
    }
//  cout<<2;
    return ;
}
void kr(){
    b=1;
    p=0;
    for(int i=1;i<=n;++i)
    fa[i]=i;
    sort(e1+1,e1+e+1,cmp);
    memset(head,0,sizeof(head));
    for( int i=1;i<n;){
        x=find(e1[b].f);
        y=find(e1[b].to);
        //add2(e1[b].to,e1[b].f,e1[b].t,e1[b].l); 
        add2(e1[b].f,e1[b].to,e1[b].t,e1[b].l);
        b++;
        if(x!=y){
            fa[x]=y;
            i++;
        }
    }
	while(e1[b-1].t==e1[b].t){
		add2(e1[b].f,e1[b].to,e1[b].t,e1[b].l);
		b++;
	}
//	cout<<"S";
    sp();
    return ;
}
void pr(int now){
//  cout<<now;
    if(now==s){
        cout<<s<<" ";
        return ;
    }
    pr(lu[now]);
    printf("%d ",now);
}
int main(){
	//freopen("10816.in","r",stdin);
	//freopen("10816.out","w",stdout);
    while((scanf("%d%d",&n,&e))!=EOF){
   // 	cout<<1;
        memset(head,0,sizeof(head));
        memset(vis,0,sizeof(vis));
        memset(lu,0,sizeof(lu));
         memset(ht,0,sizeof(ht));
        p=0;
        scanf("%d%d",&s,&t);
     //   if(s==11||t==11)
      //  return 0;
    for(int i=1;i<=e;++i){
        scanf("%d%d%lf%lf",&x,&y,&r,&d);
        add(x,y,r,d);
        add(y,x,r,d);
    } 
//    cout<<"s";
   kr();
 // for(int i=1;i<=n;++i){
   //   cout<<lu[i]<<" ";
  //}
  //cout<<endl;
//  cin>>x;
//cout<<"sss";
    pr(t); 
    printf("\n");
    printf("%.1lf %.1lf\n",dis[t],ht[t]);
    }
} 
2020/8/6 08:37
加载中...