萌新求助

P3905 道路重建

希望更丰富的展现?使用 # Markdown
by 影子鱼llt @ 2018-11-08 22:34:04


@[林乐天](/space/show?uid=71922) 不会诶大佬 大佬看得出来吗
by Flame丶 @ 2018-11-08 22:35:52


``` #include<queue> #include<iostream> #include<cstring> #include<algorithm> #include<string> #include<cmath> #include<cstdio> const long long inf=2147483647; const int maxn=10005; const int maxm=500005; using namespace std; int n,m,begin,end,cnt=0,d; int dis[maxn],vis[maxn],head[maxm]; bool broke[505][505]; int f[5555],g[5555],w[5555]; struct Edge { int next; int to; int dis; }edge[maxm]; void addedge(int from,int to,int dis) { edge[++cnt].next=head[from]; edge[cnt].to=to; edge[cnt].dis=dis; head[from]=cnt; return ; } void spfa() { queue<int> q; for(int i=1;i<=n;i++) { dis[i]=inf; vis[i]=0; } q.push(begin); dis[begin]=0; vis[begin]=1; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=edge[i].next) { int v=edge[i].to; if(dis[v]>dis[u]+edge[i].dis) { dis[v]=dis[u]+edge[i].dis; if(vis[v]==0) { vis[v]=1; q.push(v); } } } } } int main() { cin>>n>>m; for(int i=1;i<=m;++i) { scanf("%d%d%d",&f[i],&g[i],&w[i]); } cin>>d; for(int i=1;i<=d;++i) { cin>>n>>m; broke[n][m]=1; broke[m][n]=1; } for(int i=i;i<=m;++i) { if(broke[f[i]][g[i]]==0) { addedge(f[i],g[i],0); addedge(g[i],f[i],0); } else { addedge(f[i],g[i],w[i]); addedge(g[i],f[i],w[i]); } } cin>>begin>>end; spfa(); printf("%d",dis[end]); return 0; } ```
by 影子鱼llt @ 2018-11-09 10:18:15


|