虔诚的问大家一个问题谢谢

P2901 [USACO08MAR] Cow Jogging G

@[Vito_fang](/user/226513) 你没判优先队列是不是空的啊
by WAPER4EVER @ 2020-01-16 10:41:35


@[WAPERVAPES](/user/72419) 我刚才改了一下 ```cpp while(!q1.empty() && book[q1.top().id]==1) ``` 还是在while卡住了! ![](http://img1.imgtn.bdimg.com/it/u=3817013942,325934621&fm=26&gp=0.jpg) (基础不过关的我)、、
by Vito_fang @ 2020-01-16 14:40:34


@[Vito_fang](/user/226513) 不应该啊,能不能给我发份完整代码看看
by WAPER4EVER @ 2020-01-16 15:14:08


@[WAPERVAPES](/user/72419) 好!!!! ```cpp #include<cstdio> #include<cstring> #include<queue> using namespace std; int N,M,K; int k1,h1[1010],k2,h2[1010]; struct node1{ int t,n,v; }e1[10010],e2[10010]; void add(int x,int y,int z) { k1++;k2++; e1[k1].t=x;e1[k1].v=z;e1[k1].n=h1[y];h1[y]=k1; e2[k2].t=y;e2[k2].v=z;e2[k2].n=h2[x];h2[x]=k2; } void readdata() { scanf("%d%d%d",&N,&M,&K); int x,y,z; for(int i=1;i<=M;i++) { scanf("%d%d%d",&x,&y,&z); add(x,y,z); } } bool book[1010]; int dis[1010]; struct node2 { int id,dis; friend bool operator <(node2 a,node2 b) { return a.dis>b.dis; } }; priority_queue<node2> q1; void dijkstra() { memset(dis,0x3f,sizeof(dis)); node2 temp; dis[1]=0;temp.id=1;temp.dis=0;q1.push(temp); for(int i=1;i<N;i++) { while(!q1.empty() && book[q1.top().id]==1) { q1.pop(); printf("&&"); } printf("^^^"); temp=q1.top();q1.pop(); book[temp.id]=1; for(int i=h1[temp.id];i;i=e1[i].n) { int u=e1[i].t,w=e1[i].v; if(book[u]==0 && dis[u]>dis[temp.id]+w) { dis[u]=dis[temp.id]+w; node2 t; t.id=u;t.dis=dis[u]; q1.push(t); } } } } int visit[1010]; struct node3 { int id,step,guess; friend bool operator <(node3 a,node3 b) { return a.step+a.guess>b.step+b.guess; } }; priority_queue<node3> q2; void A_star() { int cnt=1;node3 temp; temp.id=N;temp.step=0;temp.guess=dis[N]; q2.push(temp); while(!q2.empty()) { temp=q2.top();q2.pop(); visit[temp.id]++; if(visit[temp.id]>K) continue; if(visit[1]==cnt) { printf("%d\n",temp.step); cnt++; if(cnt>K) return; } for(int i=h2[temp.id];i;i=e2[i].n) { int u=e2[i].t,w=e2[i].v; node3 t; t.id=u;t.step=temp.step+w;t.guess=dis[u]; q2.push(t); } } while(visit[1]<K) { printf("-1\n"); visit[1]++; } return; } int main() { readdata(); dijkstra(); A_star(); return 0; } ``` 感谢。
by Vito_fang @ 2020-01-16 16:09:46


@[Vito_fang](/user/226513) 您咋知道是您的dij出问题
by WAPER4EVER @ 2020-01-16 16:16:45


@[WAPERVAPES](/user/72419) 因为我把那串代码改过后就ac了
by Vito_fang @ 2020-01-16 16:46:30


@[Vito_fang](/user/226513) emmm,那既然您AC了干嘛要提问呢eee
by WAPER4EVER @ 2020-01-16 18:00:20


@[Vito_fang](/user/226513) 我也不是很清楚你那个为什么会TLE。。
by WAPER4EVER @ 2020-01-16 18:00:44


@[WAPERVAPES](/user/72419) 好吧,还是谢谢你了—w—
by Vito_fang @ 2020-01-16 20:47:02


|