dis

【codevs1079】回家

匿名 (未验证) 提交于 2019-12-03 00:22:01
problem solution codes //标程Dijkstra #include<iostream> #include<algorithm> #include<vector> using namespace std ; //T int n = 60 , m, vis[ 1010 ]; //Graph struct Edge{ int v, w; Edge( int v, int w):v(v),w(w){} }; vector <Edge> G[ 70 ]; //Dijkstra int dis[ 70 ], book[ 70 ], s = ( int ) 'Z' - 'A' ; void Dijkstra(){ for ( int i = 0 ; i < n; i++)dis[i] = 0xffffff ; for ( int i = 0 ; i < G[s].size(); i++) //bugs数据可能有覆盖 dis[G[s][i].v] = min(dis[G[s][i].v],G[s][i].w); dis[s] = 0 ; book[s] = 1 ; for ( int i = 0 ; i < n; i++){ int v, w= 0xffffff ; for ( int j = 0 ; j < n; j++) if (!book[j] && dis[j]<w)

[AMPPZ2014] Petrol

匿名 (未验证) 提交于 2019-12-03 00:14:01
给定一个n个点、m条边的带权无向图,其中有s个点是加油站。 每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满。 q次询问,每次给出x,y,b,表示出发点是x,终点是y,油量上限为b,且保证x点和y点都是加油站,请回答能否从x走到y。 第一行包含三个正整数n,s,m(2<=s<=n<=200000,1<=m<=200000),表示点数、加油站数和边数。 第二行包含s个互不相同的正整数c[1],c[2],...c[s] (1<=c[i]<=n),表示每个加油站。 接下来m行,每行三个正整数u[i],v[i],d[i] (1<=u[i],v[i]<=n,u[i]!=v[i],1<=d[i]<=10000),表示u[i]和v[i]之间有一条长度为d[i]的双向边。 接下来一行包含一个正整数q(1<=q<=200000),表示询问数。 接下来q行,每行包含三个正整数x[i],y[i],b[i] (1<=x[i],y[i]<=n,x[i]!=y[i],1<=b[i]<=2*10^9),表示一个询问。 输出q行。第i行输出第i个询问的答案,如果可行,则输出TAK,否则输出NIE。 6 4 5 1 5 2 6 1 3 1 2 3 2 3 4 3 4 5 5 6 4 5 4 1 2 4 2 6 9 1 5 9 6 5 8 TAK TAK TAK NIE 如果全是加油站

最小费用最大流模板

匿名 (未验证) 提交于 2019-12-03 00:05:01
1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 #include<queue> 5 #include<algorithm> 6 #define INF 2147483647 7 #define LL long long 8 using namespace std; 9 queue<int>q; 10 int n,m,m1,t1,m2,t2,num=-1,st,ed; 11 struct node{ 12 int x,y,c,d,next; 13 }G[100000]; 14 int b[100000],head[100000],pre[100000],pos[100000],max_flow[100000]; 15 LL dis[100000]; 16 bool vis[100000]; 17 void ins(int x,int y,int c,int d) 18 { 19 G[++num].x=x;G[num].y=y;G[num].c=c;G[num].d=d;G[num].next=head[x];head[x]=num; 20 G[++num].x=y;G[num].y=x;G[num].c=0;G[num].d=-d;G[num].next=head[y];head[y]=num; 21 } 22

.net core 实现微信登陆

匿名 (未验证) 提交于 2019-12-02 23:57:01
public const string appId = "";//申请的微信给的appId public const string appSecret = "";//申请的微信给的appsecret public const string redirecturl = "";//申请的微信的回调地址 #region 微信登陆 /// <summary> /// 微信授权页面 /// </summary> /// <returns></returns> public virtual IActionResult WechatAuthorize() { var url = $"https://open.weixin.qq.com/connect/qrconnect?appid={appId}&redirect_uri={redirecturl}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"; return new RedirectResult(url); } /// <summary> /// 微信回调方法 /// </summary> /// <returns></returns> public virtual IActionResult WechatLogin() { var code =

洛谷P4015 运输问题 网络流24题

匿名 (未验证) 提交于 2019-12-02 23:47:01
看了下SPFA题解,一个一个太麻烦了,另一个写的很不清楚,而且注释都变成了"????"不知道怎么过的,于是自己来一发SPFA算法。 Part 1.题意 M 个仓库,卖给 N 显然是一个最小费用最大流(MCMF)。 Part 2.˼· S c o s t [ i ] [ j n e e d [ j [ n e e d [ j ] . . . I N F n e e d [ j m i n ( h w [ i ] , n e e d [ j ] 0 1……n n+1……n+m 10000 ) T T Part 3.代码 现在代码就好办了 注释给的很清楚 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #include<queue> 6 #include<stack> 7 #include<vector> 8 #include<map> 9 #include<set> 10 #include<algorithm> 11 12 #define I_copy_this_answer return 0; 13 14 using namespace std; 15 16 int n,m,head[1100],size=1; 17 int mmx=1000,mincost

kuangbin――最短路

匿名 (未验证) 提交于 2019-12-02 23:32:01
C - Heavy Transportation 这个题和B的类型差不多,都算是dijkstra的变形,但是这个更难想一点。让dis[i]存储1到各点最短路径的最大值。之所以可以用dijkstra,是因为对于每一次只要选当前最大的dis[v],那么这个dis一定是到v的最短路径的最大值。因为如果这条边不是的话,那么就有dis[v]=min(dis[u],g[u][v]),但是因为dis[v]是当前dis中的最大值,所以dis[v]>dis[u],如果g[u][v]>dis[v],那么dis[v]=dis[v],否则dis[v]=g[u][v]<dis[v],因此dis[v]一定是所求解,这样就可以通过松弛策略不断的推进。策略是和dijkstra求最短路一样的,表示的意义不太一样。 1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <map> 5 #include <set> 6 #include <algorithm> 7 #include <fstream> 8 #include <cstdio> 9 #include <cmath> 10 #include <stack> 11 #include <queue> 12 using namespace std; 13 const

2019.10.28 GMOJ 6394 燃烧的火焰

喜你入骨 提交于 2019-12-02 16:55:05
依然是图片题面x sol: 做法是考虑最大值不变的情况 情况是每个点都存在dist<=mx 对于每个点到燃烧点的距离 如果dist[i][j]<mx 就设那位二进制位1 否则为0 发现所有不合法的情况就是补集的子集 于是离线一下统一枚举,做完了 #pragma GCC optimize("Ofast") #pragma GCC optimize("inline", "fast-math", "unroll-loops", "no-stack-protector") #pragma GCC diagnostic error "-fwhole-program" #pragma GCC diagnostic error "-fcse-skip-blocks" #pragma GCC diagnostic error "-funsafe-loop-optimizations" #include <bits/stdc++.h> using namespace std; int N,M,K; const long long fish=998244353; bool has[1<<21]; long long dis[200005],diss[100005][25],ans; int T[800005],a[200005],cnt,qz[800005],las[800005],nex

[题解]NOI2018 归程

梦想与她 提交于 2019-12-02 15:43:55
传送门 咕了好多天了,先是打了离线暴力,后来学克鲁斯卡尔重构树,然后又咕了好久才打完 题目描述 一张 \(n\) 个点, \(m\) 条边的无向图,每条边有一个长度 \(l\) 和一个海拔 \(a\) ,每天会有一个水位线, \(a\) 小于等于水位线的都会被淹没 \(Q\) 个询问: 询问 \(u,p\) :问从 \(u\) 开始走没被淹没的边所能到达的点中,离1号点的最小距离 强制在线 分析 发现把题目转换过来之后好像还真的是个板子题 先考虑离线做法: 从高到低枚举水位线,对于当前的水位线,如果一条道路目前不会被淹没,那么之后也不会被淹没,那么我们可以用并查集维护相互之间走没有被淹没的路可以到达的点集,同一个点集中的点到1要走的路就是点集中的点到1的最小距离 再考虑强制在线: 先跑一遍最短路求出每个点到 \(1\) 的最短距离这个很显然了 可以发现首先需要维护从每个点开始走 \(a\) 值大于 \(p\) 的边所能到达的点,这个可以用克鲁斯卡尔重构树: 按照 \(a\) 从大到构建重构树,那么两个点的 \(LCA\) 就是他们之间最小海拔的最大值,也就是说,不管怎么走,从 \(u\) 到 \(v\) 必然会经过一条海拔小于等于 \(val[LCA(u,v)]\) 的边,那么我们只需要在克鲁斯卡尔重构树上维护每一个点的子树中的所有点到1的距离的最小值。 查询的时候从 \(u\)

CF241E Flights

情到浓时终转凉″ 提交于 2019-12-02 03:24:37
首先这个题目问的是从 \(1\) 到 \(n\) 的路径问题.所以我们可以先将与这些路径无关的边权直接赋为你喜欢的数 \(\in\{1,2\}\) . 令 \(dis[i]\) 表示确定玩 \(w[i]\) 后从 \(1\) 到 \(i\) 的最短距离. 那么对于剩下的任意一条边 \(\{u,v\}\) ,必定有 \(1\leq dis[v]-dis[u]\leq2\) . 其实也很好理解,就是 \(1\leq w[i]\leq2\) 并且每一条路径长度要相同. 如果 \(dis[v]-dis[u]>2\) 且 \(dis[v]-dis[u]<1\) ,就一定出现了路径不同的边( \(w[i]\) 无法弥补他们的差距). 于是我们就有了若干个约束. 于是将 \(u\rightarrow v\) 连一条 \(1\) 的边,将 \(v\rightarrow u\) 连一条 \(-2\) 的边. 跑差分约束即可. #pragma GCC optimize(3) #include<bits/stdc++.h> #define il inline #define rg register #define gi read<int> #define pii pair<int, int> using namespace std; const int N = 1010, M = 5010;

CF360E Levko and Game(贪心)

陌路散爱 提交于 2019-12-01 12:53:39
这题贪心停水的,找 \(dis1<=dis2\) 的点往歇斯底里地砍,砍到没法砍就是。 写博客是为了记录下遇到的神奇bug #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++a) #define nR(a,b,c) for(register int a = (b); a >= (c); --a) #define Fill(a,b) memset(a, b, sizeof(a)) #define Swap(a,b) ((a) ^= (b) ^= (a) ^= (b)) #define ON_DEBUGG #ifdef ON_DEBUGG #define D_e_Line printf("\n-----------\n") #define D_e(x) std::cout << (#x) << " : " <<x << "\n" #define FileOpen() freopen("in.txt", "r", stdin) #define FileSave() freopen("out.txt", "w", stdout) #define