sort排序的简单例子

本文介绍了一种基于特定条件对路径进行排序的算法实现。通过比较路径的长度、通行时间、修建费用、车流容量及当前车流量等五个属性,确保了路径排序的精确性和实用性。适用于交通规划等领域。

给你个正整数n。表示路径的个数。
接下来n行每行有7个非负整数依次表示第i条路径的:
端点u,端点v,长度l,通行所需时间t,修建该路所需费用w,车流最大容量c,当前车流量f。
对其进行排序。
我们认为长度越小的路径,rank越小。
当长度相同时,通行所需时间越小的路径,rank越小。
当通行所需时间相同时,修建该路所需费用越小的路径,rank越小。
当修建该路所需费用相同时,车流最大容量越小的路径,rank越小。
当车流最大容量相同时,当前车流量越小的路径,rank越小。
不可能有以上5个参数均相同的数据。

接下来有一个正整数m表示询问的个数。
接下来m行每行有一个正整数x。
对于每一个询问x,输出rnk值为x的边的7个属性。

Sample Input:
3
1 2 5 6 5 5 5
2 3 5 5 5 5 5
3 1 6 5 5 5 5
3
1
2
3

Sample Output:
2 3 5 5 5 5 5
1 2 5 6 5 5 5
3 1 6 5 5 5 5

Hint:
对于80%的数据,1 <= n, m <=1000
对于100%的数据,1 <= n, m <=1000000; 1 <= x <= n; 1 <= u, v, l, t, w, c, f <= 1000000000;



#include<stdio.h>
#include<iostream>
#include<algorithm>  
using namespace std;
struct Road
{
    int u;
    int v;
    int l;
    int t;
    int w;
    int c;
    int f;
};
Road road[10000];
bool cmp(const Road &r1,const Road &r2)
{
    if(r1.l!=r2.l)
     return r1.l<r2.l;
     else if(r1.t!=r2.t)
      return r1.t<r2.t;
      else if(r1.w!=r2.w)
       return r1.w<r2.w;
       else if(r1.c!=r2.c)
        return r1.c<r2.c;
        else
          return r1.f<r2.f;
}
int main()
{
    int num,n;
    scanf("%d",&num);
    for(int i=0;i<num;i++)
    scanf("%d %d %d %d %d %d %d",&road[i].v,&road[i].u,&road[i].l,&road[i].t,&road[i].w,&road[i].c,&road[i].f);
    sort(road,road+num,cmp);
    scanf("%d",&num);
    for(int i=0;i<num;i++)
    {
        scanf("%d",&n);
        n--;
        printf("%d %d %d %d %d %d %d\n",road[n].v,road[n].u,road[n].l,road[n].t,road[n].w,road[n].c,road[n].f);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值