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:只能优化到32ms?怎么优化到0ms呢...,顺便贴代码

Posted by 70 at 2015-07-10 14:46:52 on Problem 1860
In Reply To:只能优化到32ms?怎么优化到0ms呢...,顺便贴代码 Posted by:xuesu at 2014-07-20 22:31:45
> #include <cstdio>
> //#include <queue>
> //#include <deque>
> #include <cstring>
> using namespace std;
> #define MAXM 202
> #define MAXN 101
> int n,m;
> int first[MAXN];
> int next[MAXM];
> int pto[MAXM];
> double earn[MAXM];
> int start;
> double d[MAXN];
> double cost[MAXM];
> bool vis[MAXM];
> void addedge(int from,int to,double fromcost,double fromearn,int index){
>     next[index]=first[from];
>     pto[index]=to;
>     cost[index]=fromcost;
>     earn[index]=fromearn;
>     first[from]=index;
> }
> bool input(){
>     bool fl=false;
>     memset(first,-1,sizeof(first));
>    double double1;
>     scanf("%d %d %d %lf",&n,&m,&start,&double1);
>     d[start]=double1;
>     double fromc,toc,frome,toe;
>     int from,to;
>     for(int i=0;i<m;i++){
>         scanf("%d %d %lf %lf %lf %lf",&from,&to,&frome,&fromc,&toe,&toc);
>         addedge(from,to,fromc,frome,2*i);
>         addedge(to,from,toc,toe,2*i+1);
>         if(from==start&&frome>0.999999){
>             fl=true;
>         }
>         else if(to==start&&toe>0.999999){
>             fl=true;
>         }
>     }
>     return fl;
> }
> int que[MAXM];
> int quehead;
> int quetail;
> void pushback(int inse){
>     que[quetail]=inse;
>     quetail=(quetail+1)%MAXM;
>     vis[inse]=true;
> }
> void pushfront(int inse){
>     quehead=(quehead-1+MAXM)%MAXM;
>     que[quehead]=inse;
>     vis[inse]=true;
> }
> int pop(){
>     int ans=que[quehead];
>     quehead=(quehead+1)%MAXM;
>     vis[ans]=false;
>     return ans;
> }
> bool find_loop(){
>     if(!input())return false;
>     pushback(start);
>     while(quehead!=quetail){
>         int from=pop();
>         int p=first[from];
>         while(p!=-1){
>             int to=pto[p];
>             double dtemp1;
>             if((dtemp1=(d[from]-cost[p])*earn[p])>d[to]){
>                 d[to]=dtemp1;
>                 if(!vis[to]){
>                     if(d[to]>d[que[quehead]])pushfront(to);
>                     else pushback(to);
>                 }
>                 if(to==start){
>                     return true;
>                 }
>             }
>             p=next[p];
>         }
>     }
>     return false;
> }
> int main(){
>     if(find_loop()){
>         printf("YES\n");
>     }
>     else printf("NO\n");
> }

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