| ||||||||||
| 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 | |||||||||
用BFS代替DFSIn Reply To:我的程序(inside),谁说一下怎么办? Posted by:shit at 2004-11-05 22:33:27 > #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