| ||||||||||
| 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<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct sit
{
int p,dis,val;
}s1,s2;
int first[1010],next[100010],length[100010],to[100010],f[1010],
first2[1010],next2[100010],to2[100010],time[1010];
bool b[1010];
struct cmp
{
bool operator()(const sit &a,const sit &b)
{
return a.val>b.val;
}
};
priority_queue<sit,vector<sit>,cmp> q;
int main()
{
int i,j,k,l,m,n,p,x,y,z,s,t,min;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
next[i]=first[x];
first[x]=i;
length[i]=z;
to[i]=y;
next2[i]=first[y];
first2[y]=i;
to2[i]=x;
}
scanf("%d%d%d",&s,&t,&k);
memset(f,0x42,sizeof(f));
f[t]=0;
for (i=1;i<=n;i++)
{
p=-1;
min=0x7f7f7f7f;
for (j=1;j<=n;j++)
if (f[j]<min&&!b[j])
{
p=j;
min=f[j];
}
if (p==-1) break;
b[p]=1;
for (j=first2[p];j;j=next2[j])
if (f[to2[j]]>f[p]+length[j])
f[to2[j]]=f[p]+length[j];
}
s1.p=s;
s1.dis=0;
s1.val=f[s];
q.push(s1);
if(s==t) k++;
while (!q.empty())
{
s1=q.top();
printf("p=%d dis=%d val=%d\n",s1.p,s1.dis,s1.val);
q.pop();
if (++time[s1.p]==k)
{
printf("%d\n",s1.val);
return 0;
}
for (i=first[s1.p];i;i=next[i])
{
s2.p=to[i];
s2.dis=s1.dis+length[i];
s2.val=s2.dis+f[s2.p];
q.push(s2);
}
}
printf("-1\n");
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator