hdu6852
之前見過類似的題,所以寫起來很輕鬆
因為要讓最短路邊長,所以可以先跑最短路
滿足d is
[u]=
=dis
[v]+
d[i]
.w
dis[u]==dis[v]+d[i].w
dis[u]
==di
s[v]
+d[i
].w的邊就是最短路邊
這些最短路邊形成一張網路
在上面跑最小割,代表的就是割斷每一條最短路
#include using namespace std;
#define int long long
const int maxn=4e5+10;
const int inf =1e18;
struct edged[maxn],d1[maxn];
int head[maxn],cnt=1;
int head1[maxn],cnt1=1,n,m,s,t;
void add( int u,int v,int flow)
,head[u]=cnt;
d[++cnt]=(edge),head[v]=cnt;
}void addone(int u,int v,int w)
,head1[u]=cnt1;
}int gap[maxn],deep[maxn];
bool bfs()
}}int isap(int u,int flow)
}if( --gap[deep[u]]==0 ) deep[s]=t+1;//斷層
deep[u]++;
gap[deep[u]]++;
return flow-res;
}int dis[maxn],vis[maxn];
void spfa()}}
}signed main()
spfa();
for( int i=1;i<=n;i++)
for(int j=head1[i];j;j=d1[j].nxt )
int ans=0;
bfs();
while( deep[s]ans+=isap(s,inf);
cout << ans << '\n';
cnt=cnt1=1;
for(int i=0;i<=t;i++) head[i]=head1[i]=0;
}}
2019HDU多校Path 最短路最小割
給出乙個 n 個頂點 m 條邊的圖,要求阻塞一些邊,使得從 1 到 n 的最短路變長,求阻塞的邊長度和的最小值,不必保證阻塞後可達。很顯然,要阻塞的邊肯定在最短路圖上,先跑一遍單源最短路,求出最短路圖。要使最短路變長,肯定要同時切斷原有的所有最短路,又要是長度 相當於流量 和最小,很容易想到就是求最...
2019HDU多校第7場 構造
假設現在你在準備考試,明天的考試有 n 道題目,對於分值為 i 的題目至少複習 i 1 小時才能做對,已知總分為 m 求確保完成 k 道題的最少時間。手動嘗試一下,發現答案都是 aabbbb 這樣的形式。例如,5 18 3 rightarrow 6 6 7 7 7,5 19 3 rightarrow...
2019HDU多校 6223 (最小質因子指數冪)
傳送門 題解 考慮先篩出1e4 1e41e 4以內的素數,對於每個輸入的 n nn 先除掉 1e4 1e41e 4 以內的素因子 如果存在的話 並且更新答案。如果除完後n nn 還大於1,說明存在大於1e4 1e41e 4的素因子,而且這些素因子的最多隻會有4 44次方,因為更大的話就會超過 1 e...