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 |
我按树做的,超时了,好像是因为递归栈溢出,谁说一下In Reply To:是有向图还是无向图啊?题目表述不清。 Posted by:tq at 2004-11-05 21:37:14 #include <iostream> #include <cstdlib> #include <memory> #include <list> using namespace std; const int maxn=40001; struct node_type { int rec,val; }; struct dist_type { int pre,val,rec; }dist[maxn]; list<node_type>li[maxn]; void solve(int root) { list<node_type>::iterator i; if(li[root].empty())return; for(i=li[root].begin();i!=li[root].end();i++) { solve(i->rec); if(dist[i->rec].val+i->val>dist[root].val) dist[root].val=dist[i->rec].val+i->val; } } int main(int argc, char *argv[]) { int i,j,r,x,y,sum,max,temp_1,temp_2,n,m;char c; list<node_type>::iterator li_i; node_type node; while(cin>>n>>m) { memset(dist,0,sizeof(dist)); for(i=1;i<=n;i++) li[i].clear(); for(i=1;i<=n;i++)dist[i].rec=i; for(i=0;i<m;i++) { cin>>x>>y>>sum>>c; node.val=sum; if(c=='W' || c=='N') { dist[x].pre=y; node.rec=x; li[y].push_back(node); } else { dist[y].pre=x; node.rec=y; li[x].push_back(node); } } for(j=1;j<=n;j++) if(!dist[j].pre) { r=j; solve(r); } max=0; for(i=1;i<=n;i++) { temp_1=temp_2=0; for(li_i=li[i].begin();li_i!=li[i].end();li_i++) { if(li_i->val+dist[li_i->rec].val>temp_1) temp_1=li_i->val+dist[li_i->rec].val; else if(li_i->val+dist[li_i->rec].val>temp_2) temp_2=li_i->val+dist[li_i->rec].val; } if(temp_1+temp_2>max)max=temp_1+temp_2; } for(i=1;i<=n;i++) if(dist[i].val>max) max=dist[i].val; cout<<max<<endl; } system("PAUSE"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator