您的位置:首页 > 其它

pat 1003. Emergency (25)

2017-12-10 10:51 411 查看
#include <iostream>
#include <algorithm>
using namespace std;
#include <vector>

struct Node {
int dist=0;
int recume=0;
};
vector<Node> res;
int a[505][505]={0};
int eachRes[500];
int n,m;
bool way[500];

void dfs(int now,int desti,Node tmp){
for(int i=0;i<n;i++){
if(a[now][i]>0){
tmp.dist += a[now][i];
tmp.recume += eachRes[i];
a[now][i] = -1;
a[i][now] = -1;
if(i==desti){
res.push_back(tmp);
}else dfs(i,desti,tmp);
tmp.dist = 0;
tmp.recume = eachRes[now];
}
}
return;
}
bool cmp1(Node a,Node b){
if(a.dist!=b.dist)
return a.dist<b.dist;
else
return a.recume>b.recume;
}

int main() {
ios::sync_with_stdio(false);
int now,desti;
Node tmp;
cin>>n>>m>>now>>desti;
for(int i=0;i<n;i++){
cin>>eachRes[i];
}
int c1,c2,d;
for(int i=0;i<m;i++){
cin>>c1>>c2>>d;
a[c1][c2] = d;
a[c2][c1] = d;
}
for(int i=0;i<500;i++){
way[i] = false;
}
way[now] = true;
tmp.recume += eachRes[now];
dfs(now,desti,tmp);
sort(res.begin(),res.end(),cmp1);
cout<<res[0].dist<<" "<<res[0].recume;
return 0;
}


只过一个测试点(10’)

还没找出错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: