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:嘿嘿,第一次在POJ上一次AC,就是做N次SPFA,取最小值啦In Reply To:嘿嘿,第一次在POJ上一次AC,就是做N次SPFA,取最小值啦 Posted by:xijunlee93 at 2012-12-05 20:46:17 > #include<fstream> > using namespace std; > int d[200],hash[200],n,w[200][200],queue[2000]; > ifstream infile; > ofstream outfile; > void function(); > int max(int a,int b) > { > if (a>=b) > return a; > else return b; > } > int main() > { > > infile.open("data.in",ios::in); > outfile.open("data.out",ios::out); > int i,m,j,u,v; > do > { > infile>>n; > if (n!=0) > { > memset(w,0,sizeof(w)); > for (i=1;i<=n;i++) > { > infile>>m; > for (j=1;j<=m;j++) > { > infile>>u>>v; > w[i][u]=v; > } > } > function(); > } > }while(n!=0); > infile.close(); > outfile.close(); > } > void function() > { > > int i,j,u,v,tou,wei,ans[101],ANS=214000,ANSi; > memset(ans,214000,sizeof(ans)); > for (i=1;i<=n;i++) > { > memset(d,0,sizeof(d)); > memset(hash,0,sizeof(hash)); > memset(queue,0,sizeof(queue)); > for (j=0;j<=n;j++) > d[j]=214000; > d[i]=0; > tou=0;wei=0; > queue[wei++]=i;hash[i]=1; > while (tou<wei) > { > u=queue[tou++];hash[u]=0; > for (v=1;v<=n;v++) > if (d[v]>d[u]+w[u][v]&&w[u][v]>0) > { > d[v]=d[u]+w[u][v]; > if(hash[v]==0) > {hash[v]=1;queue[wei++]=v;} > } > } > for (v=1;v<=n;v++) > ans[i]=max(d[v],ans[i]); > } > for (i=1;i<=n;i++) > if (ANS>ans[i]) > {ANS=ans[i];ANSi=i;} > if (ANS==214000) > outfile<<"disjoint"<<endl; > else > outfile<<ANSi<<' '<<ANS<<endl; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator