| ||||||||||
| 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:只能优化到32ms?怎么优化到0ms呢...,顺便贴代码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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator