蒟蒻渣渣求助

P1339 [USACO09OCT] Heat Wave G

@[Ofnewname](/space/show?uid=102604) 无向边 == 两条有向边
by かなで @ 2018-06-27 07:51:11


你的都过不了编译。。。
by Ophelia @ 2018-06-27 07:52:17


这样就是无向的了 ``` #include <iostream> #include <queue> #define MAXN 10000+5 #define MAXM 500000+5 using namespace std; int N,M,K,s,flag[MAXN],use[MAXN]; //K,s为起点和目标 //flag是邻家链表,use是入队标记 long long ans[MAXN]; int u[MAXM],v[MAXM],val[MAXM],nxt[MAXM]; queue <int> dat; int main() { ios::sync_with_stdio(0); for (int i=1; i<=MAXN; i++) ans[i]=0x7fffffff; cin>>N>>M>>K>>s; for (int i=1; i<=M; i++) { cin>>u[i]>>v[i]>>val[i]; nxt[i]=flag[u[i]]; flag[u[i]]=i; //邻接链表 } ans[K]=0; dat.push(K); use[K]=1; while (!dat.empty()) { int i=dat.front(); use[i]=0; dat.pop(); for (int j=flag[i]; j; j=nxt[j]) { if (ans[v[j]]>ans[u[j]]+val[j]) { ans[v[j]]=ans[u[j]]+val[j]; if (!use[v[j]]) { dat.push(v[j]); use[v[j]]=1; } } if (ans[u[j]]>ans[v[j]]+val[j]) { ans[u[j]]=ans[v[j]]+val[j]; if (!use[u[j]]) { dat.push(u[j]); use[u[j]]=1; } j=nxt[j]; } } } cout<<ans[s]; return 0; } ```
by Ophelia @ 2018-06-27 07:54:51


@[かなで](/space/show?uid=100018) @摩多罗隐岐奈谢谢大佬们,已经AC
by AlgoEmperor @ 2018-06-27 17:55:12


|