| ||||||||||
| 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 | |||||||||
TLE了,有没有大神能帮我改一下?#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define INF 1100
#define MAXN 99999999
struct node
{
int t;
int p;
}p[INF*INF];
struct edge
{
int u,v,len;
int mint,maxt;
}e[INF];
int s,tt,n,m,tot,MaxOfTime,MaxOfLen;
char str[360000];
int tim[40],next[INF],first[INF];
int vis[INF];
void insert(int u,int v,int t1,int t2,int len)
{
if(t2-t1<len) return;
tot++;
next[tot]=first[u];
first[u]=tot;
e[tot].u=u; e[tot].v=v; e[tot].mint=t1; e[tot].maxt=t2-len; e[tot].len=len;
tot++;
next[tot]=first[v];
first[v]=tot;
e[tot].u=v; e[tot].v=u; e[tot].mint=t1; e[tot].maxt=t2-len; e[tot].len=len;
}
int maxx(int x,int y) {return x>y?x:y;}
void bfs()
{
int u,v,len,i,t1,t2,t;
memset(vis,0,sizeof(vis));
queue<int>q;
q.push(s);
for(i=1;i<=n;i++) p[i].t=MAXN;
p[s].t=0;
while(!q.empty()){
u=q.front(); q.pop(); vis[u]=0;
// printf("u=%d\n",u);
for(i=first[u];i!=-1;i=next[i]){
// printf("i=%d\n",i);
// system("pause");
v=e[i].v; len=e[i].len; t=p[u].t;
t1=e[i].mint; t2=e[i].maxt;
if(t>t2) continue;
t=maxx(t1,t);
if(t+len<p[v].t)
{
p[v].t=t+len;
if(vis[v]==0){
vis[v]=1;
q.push(v);
}
}
}
}
if(p[tt].t==MAXN) printf("*\n");
else printf("%d\n",p[tt].t);
}
int main()
{
int u,v,len,NumOfTime,i,j;
char c;
while(scanf("%d",&n) && n){
scanf("%d%d%d",&m,&s,&tt);
tot=0;
memset(next,-1,sizeof(next));
memset(first,-1,sizeof(first));
memset(e,-1,sizeof(e));
for(j=1;j<=m;j++){
memset(tim,0,sizeof(tim));
scanf("%d%d%d",&u,&v,&len);
NumOfTime=0;
while(1){
scanf("%c",&c);
if(c!=' ' && (c<'0' || c>'9')) break;
scanf("%d",&tim[++NumOfTime]);
}
for(i=1;i<=NumOfTime;i+=2) insert(u,v,tim[i-1],tim[i],len);
if(NumOfTime%2==0) insert(u,v,tim[NumOfTime],MAXN,len);
}
if(s==tt) {printf("0\n"); continue;}
/* for(i=1;i<=n;i++) printf("first[%d]=%d\n",i,first[i]);
for(i=1;i<=tot;i++) printf("next[%d]=%d\n",i,next[i]);
*/ bfs();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator