给你个正整数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;
}