| ||||||||||
| 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 | |||||||||
Re:为什么wa啊?In Reply To:为什么wa啊? Posted by:yangguo981 at 2006-05-19 01:15:57 > 不就是单原点最短路径吗??
>
> #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