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 |
why tle...#include <iostream> #include <fstream> #include <list> #include <vector> using namespace std; ifstream fin("t3026.in"); struct node { int x,y; }; struct node_ { int x,y; int step; }; vector<node> vec; list<node_> b_vec; const int MAXN=200; int n; int x,y; char ch[MAXN][MAXN]; bool hash[MAXN][MAXN]; bool hash_[MAXN]; int id[MAXN][MAXN]; int edge[MAXN][MAXN]; int dist[MAXN]; int v1[4]={0,0,1,-1},v2[4]={1,-1,0,0}; const int INF=0x7FFFFFFF; void bfs(int ix,int iy) { while(b_vec.size()>0) { node_ p=b_vec.front(); int x=p.x; int y=p.y; int step=p.step; hash[x][y]=true; for (int i=0;i<4;i++) { int x_=x+v1[i],y_=y+v2[i]; if (x_<1||y_<1||x>::y||y>::x) continue; if ('#'==ch[x_][y_]) continue; if (hash[x_][y_]) continue; if (' '==ch[x_][y_]) {node_ p_;p_.x=x_;p_.y=y_;p_.step=step+1;b_vec.push_back(p_);} if ('A'==ch[x_][y_]) {node_ p_;p_.x=x_;p_.y=y_;p_.step=step+1;edge[id[ix][iy]][id[x_][y_]]=p_.step;b_vec.push_back(p_);} } b_vec.pop_front(); } } void init() { memset(edge,0,sizeof(edge)); for (int i=0;i<vec.size();i++) { node p=vec.at(i); memset(hash,0,sizeof(hash)); node_ p_; p_.x=p.x; p_.y=p.y; p_.step=0; b_vec.clear(); b_vec.push_back(p_); // cout<<p.x<<" "<<p.y<<endl; bfs(p.x,p.y); } } void prim() { memset(hash_,0,sizeof(hash_)); int n_=vec.size(); for (int i=0;i<n_;i++) dist[i]=INF; dist[0]=0; int answer=0; for (int i=0;i<n_;i++) { int min=INF; int u=-1; for (int j=0;j<n_;j++) { if (hash_[j]) continue; if (min>dist[j]) {min=dist[j];u=j;} } hash_[u]=true; answer+=dist[u]; for (int j=0;j<n_;j++) { if (dist[j]>edge[u][j]) dist[j]=edge[u][j]; } } cout<<answer<<endl; } int main() { cin>>n; while(n--) { vec.clear(); cin>>x>>y; getchar(); for (int i=1;i<=y;i++) { for (int j=1;j<=x;j++) { ch[i][j]=getchar(); if ('S'==ch[i][j]) ch[i][j]='A'; if ('A'==ch[i][j]) {node n_;n_.x=i;n_.y=j;vec.push_back(n_);id[i][j]=vec.size()-1;} } while (getchar() != '\n'); } init(); prim(); } return 0; } 超的我没想法了.....orz..谁帮帮忙吧-.-..我都虚脱了 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator