2019杭電多校訓練(一)

2022-05-01 01:39:08 字數 2132 閱讀 4100

刪除某些邊,讓$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時有最大值 否則沒有符合條件...