Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么wa啊?不就是单原点最短路径吗?? #include <vector> #include <deque> #include <list> #include <set> #include <map> #include <string> #include <stack> #include <numeric> #include <algorithm> #include <functional> #include <iterator> #include <cmath> #include <complex> #include <limits> #include <iostream> #include <sstream> #include <fstream> using namespace std; #define BE(a) (a).begin(),(a).end() #define FOR(i,j,k) for(i=j; i<k; ++i) #define REP(i,n) FOR(i, 0, n) typedef pair<int, int> PII; typedef vector<int> VI; typedef vector<VI> VII; typedef vector<string> VS; int F,P,C,M; vector<vector<double> > costMatrix; vector<bool> used; vector<double> result; vector<int> pos; const double INF = 1e20; int main(){ ifstream fileget("1.txt"); fileget >> F >> P >> C >> M; costMatrix.assign(F+1, vector<double>(F+1, INF)); used.assign(F+1, false); result.assign(F+1, INF); int i,j; for(i=1; i<F+1; ++i) costMatrix[i][i] = 0; pos.assign(C+1); while(P--){ int f1,f2,c; fileget >> f1 >> f2 >> c; costMatrix[f1][f2] = costMatrix[f2][f1] = c; } int index = 1; while(C--){ int i; fileget >> i; pos[index++] = i; } /* FOR(i, 1, F+1){ FOR(j,1,F+1) cout << costMatrix[i][j] << " "; cout << endl; } */ int cnt = 1; result[1] = 0; while(cnt != F){ double m = INF; int index; FOR(i,1,F+1) if (!used[i] && result[i] < m){ m = result[i]; index = i; } used[index] = true; FOR(i, 1, F+1) if (costMatrix[1][index]+costMatrix[index][i]<result[i]) result[i] = costMatrix[1][index]+costMatrix[index][i]; ++cnt; } /* copy(result.begin()+1, result.end(), ostream_iterator<int>(cout, " ")); cout << endl; copy(pos.begin()+1, pos.end(), ostream_iterator<int>(cout, " ")); cout << endl; */ int ret = 0; vector<int> ans; FOR(i,1,pos.size()){ //pos[i]:牛i在pos[i]节点 if (result[pos[i]] <= M){ ++ret; ans.push_back(i); /* cout << result[pos[i]] << endl; cout << i << endl; cout << pos[i] << endl; */ } } cout << ret << endl; copy(BE(ans), ostream_iterator<int>(cout, "\n")); return 1; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator