1003. Emergency (25)

来源:互联网 发布:js鼠标跟随效果 编辑:程序博客网 时间:2024/06/11 04:50
#include <iostream>using namespace std;#define N 500struct Node {int d;int paths;int maxteam;bool done;};int main(int argc, char **argv) {int m, n, src, dst, c1, c2;int adj[N][N] = {{0}}, team[N] = {0};Node NodeList[N] = {0};cin >> n >> m >> src >> dst;for(int i = 0; i < n; i ++) {cin >> team[i];NodeList[i].maxteam = team[i];}for(int i = 0; i < m; i ++) {cin >> c1 >> c2;cin >> adj[c1][c2];adj[c2][c1] = adj[c1][c2];}int next = src;NodeList[src].paths = 1;NodeList[src].done = true;while(true) {for(int i = 0; i < n; i ++) {if(adj[next][i] && !NodeList[i].done) {int tmpd = NodeList[next].d + adj[next][i];if(!NodeList[i].d || tmpd < NodeList[i].d) {NodeList[i].paths = NodeList[next].paths;NodeList[i].maxteam = NodeList[next].maxteam + team[i];NodeList[i].d = tmpd;}else if(tmpd == NodeList[i].d) {NodeList[i].paths += NodeList[next].paths;int tmpt = NodeList[next].maxteam + team[i];if(tmpt > NodeList[i].maxteam)NodeList[i].maxteam = tmpt;}}}int minD = 0x7FFFFFFF;for(int i = 0; i < n; i ++) {if(NodeList[i].d && !NodeList[i].done && NodeList[i].d < minD) {next = i;minD = NodeList[i].d;}}NodeList[next].done = true;if(next == dst) {break;}}cout << NodeList[dst].paths << ' ' << NodeList[dst].maxteam << endl;return 0;}

0 0
原创粉丝点击