多合一网站源码网络营销ppt讲解
多合一网站源码,网络营销ppt讲解,wordpress 阿里云主机名,计算机网络工程网站建设Problem - G - Codeforces
推荐视频题解#xff1a;G_哔哩哔哩_bilibili
思路#xff1a;
先不管同一个线路上的#xff0c;就正常建边#xff0c;这样点距都是1. 然后虚点就是该线路的每个点都连的点。
到虚点的边权是1#xff0c;表示我们坐这趟线路。
然后这个虚点…Problem - G - Codeforces
推荐视频题解G_哔哩哔哩_bilibili
思路
先不管同一个线路上的就正常建边这样点距都是1. 然后虚点就是该线路的每个点都连的点。
到虚点的边权是1表示我们坐这趟线路。
然后这个虚点能去的点的边权都是0. 链式前向星要开3倍的分别是都是双向所以nxt要开6*maxn
1.车站间的
2.每个车站与虚点相连的
3.每个虚点连的所有车站
参考代码
const int maxn 2e5 5;//链式前向星 邻接表
int tot 0;//total 下标
int head[maxn*3];//这个邻接表的头的位置
int nxt[maxn * 6];//下一个点的下标
int node[maxn * 6];//每个点的编号
int val[maxn * 6];//边权
inline void add(int a, int b, int t 1)
{tot;nxt[tot] head[a];head[a] tot;node[tot] b;val[tot] t;//a到b的权值
}int b, e;
int ans;
int color[maxn];
int ctot 0;int tmpdis 1;
struct dis_node//放堆里面比长度但是想知道端点
{int dis;int next;bool operator (const dis_node a){return dis a.dis;}dis_node(int d, int n){dis d; next n;}
};
class cmp
{
public:bool operator()(dis_node a, dis_node b){return a.dis b.dis;//}
};
void dijkstr(vectorint dij, int ori, int n)
{priority_queuedis_node, vectordis_node, cmpheap;vectorintbarr(n2);int cur ori;while (1){//该次点所有可走的//for (auto next : arr[cur])//{// if (next cur)continue;// //next就是下一个点邻接表// if (dij[next] 0)// dij[next] dij[cur] tmpdis;// else// dij[next] min(dij[next], dij[cur] tmpdis);// heap.push(dis_node(dij[next], next));//}for (int i head[cur]; i; i nxt[i]){if (node[nxt[i]] cur)continue;if(dij[node[i]] 0)dij[node[i]] dij[cur] val[i];elsedij[node[i]] min(dij[node[i]], dij[cur] val[i]);heap.push(dis_node( dij[node[i]], node[i] ));}//该点已使用已最短无需再抵达barr[cur] 1;//最短路中找最短同时可抵达的while (heap.size()){if (barr[heap.top().next] 0)break;heap.pop();}if (heap.size() 0)break;cur heap.top().next;heap.pop();}
}void solve()
{int n, m;cin n m;ans n;memset(color, 0, sizeof(int)*(ctot1));tot ctot 0;memset(head, 0, sizeof(int)* (n 1) * 2);mapint, intcpos;for (int i 0; i m; i){int u, v, c;cin u v c;add(u, v,1);add(v, u,1);if (color[cpos[c]] 0){ctot;cpos[c] ctot;color[ctot] ctot n;}add(color[cpos[c]], u, 0);add(u, color[cpos[c]], 1);add(color[cpos[c]], v, 0);add(v, color[cpos[c]], 1);}cin b e;if (b e){cout 0 endl;return;}vectorintdij(nm2);dijkstr(dij,b,nm2);cout dij[e] endl;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88033.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!