Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:网上找的一个模板 用的是Dinic算法 可是在HDU可以过 0MS 280 K 但是在PKU却TLE !!我把代码贴出来,向各位大牛求救啊……

Posted by tanyin at 2009-08-26 11:25:10 on Problem 1273
In Reply To:网上找的一个模板 用的是Dinic算法 可是在HDU可以过 0MS 280 K 但是在PKU却TLE !!我把代码贴出来,向各位大牛求救啊…… Posted by:liuxinbiao at 2009-08-25 18:46:46
#include  "iostream"  
#include  "queue"   
  
using namespace std;   
int m,n,a,b,c,cost[201][201];   
int Pre[201],Min[201],M=10000001;   
bool visit[201];   
  
int Bfs()   
{   
             queue<int>  q;   
             int temp;   
             visit[1]=true;   
             Pre[1]=0;   
             Min[1]=M;   
             q.push(1);                 
             while(!q.empty())   
             {   
                            
                         temp=q.front();   
                         q.pop();     
                         for(int i=1;i<=m;i++)   
                         {   
                                 if(!visit[i]&&cost[temp][i])   
                                 {   
                                               
                                            Min[i]=(Min[temp]<cost[temp][i]) ? Min[temp] : cost[temp][i];   
                                            Pre[i]=temp;   
                                            visit[i]=true;   
                                            q.push(i);  
                                            if(i==m) return Min[m]; 
                                 }                                   
                         }   
             }   
             if(visit[m] == false)   //有这句就AC了,没这句就WA了 WHY? 
                   return    -1;   
   /*   把if(visit[m] == false)
            return    -1;
        改为:
            return    -1; 
        就错了,为什么,我觉的IF 语句对这里没影响啊!
          哪位大牛解释下。。 
   */ 
           
                        
}   
  
void Ford_Fulkerson()   
{   
             int f,Max_Flow=0;   
             while((f=Bfs())!=-1)   
             {   
                                    
                     int temp=m;   
                     Max_Flow+=f;   
                     memset(visit,false,sizeof(visit));   
                     while(temp!=1)   
                     {   
                             int r=Pre[temp];   
                             cost[r][temp]-=f;   
                             cost[temp][r]+=f;   
                             temp=r;   
                     }   
             }   
             printf("%d\n",Max_Flow);   
}                                         
  
int main()   
{   
           
                  
               while(scanf("%d%d",&n,&m)!=EOF)   
               {   
                                memset(cost,0,sizeof(cost));   
                                for(int i=1;i<=n;i++)   
                                {   
                                              scanf("%d%d%d",&a,&b,&c);   
                                                    cost[a][b]+=c;   
                                }                                   
                                Ford_Fulkerson();   
               }                          
              
               return 0;   
}                  




Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator