刪除某些邊,讓$1$到$n$的最短路徑發生變化
刪除某條邊的費用是邊的長度
先用迪傑斯特拉跑一遍整個圖,滿足$dis[a]+w=dis[b]$的邊,肯定是最短路徑上的邊
選出這些邊,找到乙個最小割集,dinic比ek快很多,雖然漸進複雜度相同,都是$o(nm^2)$
dinic加上弧優化後速度更快
#include#define ll long long#define ull unsigned long long
#define pa pairusing namespace std;
const ll maxn=1e4+5;
const ll maxm=1e7+10;
const ll mod=1e9+7;
vector>ve[maxn];
ll dis[maxn];
int n,m,edge_num=-1,head[maxn],dep[maxn];
bool vis[maxn];
struct edgeedge[maxn*2];//maxn=1e4
void add_edge(int a,int b,int c)//邊數從0開始,每次加上反向邊,這樣奇偶交替加邊,重邊無所謂
bool bfs()}}
if(dep[n]==1e9)return false;
else return true;
}int dfs(int x,int lowflow)}}
return used;
}void dinic()
}printf("%lld\n",maxflow);
}void dj()}}
}int main()
dj();
if(dis[n]==1e18)
for(int i=1;i<=n;i++)head[i]=-1;
edge_num=-1;
for(int i=1;i<=n;i++)edge[maxn*2];//maxn=1e4
void add_edge(int a,int b,int c)//邊數從0開始,每次加上反向邊,這樣奇偶交替加邊,重邊無所謂
bool bfs()//分層}}
if(dep[n]==1e9)return false;
else return true;
}int dfs(int x,int lowflow)}}
return used;
}void dinic()
}printf("%lld\n",maxflow);
}void dj()}}
}int main()
dj();
if(dis[n]==1e18)
for(int i=1;i<=n;i++)head[i]=-1;
edge_num=-1;
for(int i=1;i<=n;i++)
if(pos[0]<0)return true;
return false;
}int main()
printf("%.10f\n",st);
}return 0;
}
有兩種操作,1,在陣列最後新增一位,2,求區間的最大異或和
如果對每個區間求一次線性基,肯定超時
我們可以求出乙個字首線性基,不同的是,如果$b[i]$(線性基數組)位置已經有乙個數,我們把位置大的數放進去,並且拿出$b[i]$
對於每次詢問,我們只需要看這個基底位置是不是大於$l$即可
#include#define ll long long#define pi acos(-1.0)
#define pa pairusing namespace std;
const int maxn=1e6+10;
const ll mod=1e9+7;
pa b[31],base[maxn][31];
void add(int x,int pos)
if(pos>b[i].second)
x^=b[i].first;}}
}int main()
int lastan=0;
for(int i=1;i<=m;i++)else}}
return 0;
}
2019杭電多校訓練(四)
把乙個數轉化成質因數加指數連乘的形式,求最小指數 當時我們考慮先篩出 1e18 的所有素數,複雜度大概在 2e8 左右,剛好被卡了 其實篩到 1e18 的情況也不是很複雜 當時以為四個因數太複雜了,沒敢寫 把小於 1e18 的質因子去掉,剩下的最多有四個質因子 如果m可以開四次根,那麼m一定是qqq...
2019杭電多校訓練第二場1002
題意 給出n個數,接下來有m次操作。1 k 在陣列後面多加乙個k。n n 1 0 l r 詢問 l,r 區間內任意取數,異或和的最大值。特別要注意的是2種操作都加密了,1號操作需要k k lasten 2號操作需要l l lasten n 1,r r lasten n 1.lasten初始值為0,以...
杭電多校訓練第一場
第一題 注意 題目中的x n代表的意思是n能被x整除。題目的意思是 給你乙個整數n,尋找x,y,z,使得x y z n並且x n,y n,z n,求xyz的最大值。可以證明,如果n是3的倍數,當x y z n 3時,有最大值 如果n是4的倍數,當x y n 4,z n 2時有最大值 否則沒有符合條件...