有没有大佬帮忙看看,实在是找不出错了,谢谢!
船上的电力系统为一股导线。对于每根导线,它是合法的当且仅当它的正极在负极的上方,并且它连接的两个端点的距离必须刚好等于这根导线的长度(完全紧绷)。原来这股导线是竖直地嵌在墙壁里的,而现在这坨导线散落在地上。他想知道导线的各个节点原来的顺序
第一行一个整数表示导线个数 n。
以下是 n 行,每行三个整数 a,b,c 表示 a(正极)必须比 b(负极)高 c。保证点数<=n+1。
输出文件包含了导线从高到低的节点序号。具有相同高度的导线节点输出在同一行里,按标号升序输出。
输入数据
9
1 2 3
2 3 5
2 7 1
4 5 4
5 6 1
5 9 1
6 7 1
7 8 3
9 8 4
输出数据 4
1
5
2 6 9
7
8
3
Limitation
40%的数据,1<=N<=200。
100%的数据,1<=N<=300。
#include <bits/stdc++.h>
using namespace std;
vector <int> q[500];
int sum[500];
bool p[500];
queue<int> qq;
int mp[500][500];
int n,x,y,z;
struct info
{
int id,sum;
}a[500];
bool cmp(info x,info y)
{
return x.sum>y.sum||(x.sum==y.sum&&x.id<y.id);
}
void bfs()
{
while(!qq.empty())
{
int to=qq.front();
qq.pop();
p[to]=1;
for(int i=0;i<q[to].size();i++)
{
if(!p[q[to][i]])
{
sum[q[to][i]]=sum[to]+mp[to][q[to][i]];
p[q[to][i]]=1;
qq.push(q[to][i]);
}
}
}
}
void print()
{
for(int i=1;i<=n;i++)
a[i].id=i,a[i].sum=sum[i];
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
cout<<a[i].id<<" ";
if(a[i].sum>a[i+1].sum) cout<<endl;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y>>z;
mp[x][y]=-z;
mp[y][x]=z;
q[x].push_back(y);
q[y].push_back(x);
}
qq.push(1);
sum[1]=0;
bfs();
print();
return 0;
}