@[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