摘要:
思路:见代码#include#include#include#include#define Maxn 110using namespace std;int a[Maxn][Maxn],b[Maxn][Maxn],n,k;bool equel(){ int i,j; for(i=1;i1) return false; return true;}bool bb(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(b[i][j]!=b[j][i]) r... 阅读全文
摘要:
思路:这题的原型题是比较经典的网络流。原型题模型就是把所有的障碍去掉。有障碍做法还是一样的,只用将每个列和行重新划分,求最大流就行了。#include #include #include #include #define Maxn 120010#define Maxm 210000#define LL int#define inf 100000000#define Abs(a) (a)>0?(a):(-a)using namespace std;struct Edge{ int from,to,next; LL val;}edge[Maxm];const double eps=1e... 阅读全文
摘要:
思路:这题的N有500,直接floyd肯定超时。我的做法是每次枚举一个点,求出包含这个点的最小环。对所有最小环取最小值。求包含某个点的最小环我用的是启发式搜索,先以该点求一次spfa,然后dfs解决问题。#include#include#include#include#define Maxn 600#define inf 1000000using namespace std;int head[Maxn],vi[Maxn],dis[Maxn],e,que[Maxn*100],ans,dist[Maxn];struct Edge{ int u,v,next;}edge[Maxn*100];v... 阅读全文
摘要:
思路:维护一个森林,二分枚举最小的最大值。#include#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp make_pair#define Maxn 20010#define Maxm 40010#define LL long long#define Abs(x) ((x)>0?(x):(-x))#define lson(x) (xdfn[u]){ is[u]=1; ... 阅读全文
摘要:
思路:对于TT来说,如果数量分别为a a b或 a b a,或 b a a的形式,那么TT必赢,因为TT可以使其成为 a a a的形式,那么不论DD 怎么拿,都是TT最后使其成为a a a 的形式,00 0也是a a a的形式,故TT胜。同样,存在必败局。如果a,b,c是先手的必败局,那么将其中某个数加k,或将其中某两个数同时加k,那么就成了先手的必胜局。#include#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp ma 阅读全文
摘要:
思路:每次枚举每个工人的右边界j,维护最优的左边界k。那么dp[j]=max(dp[j],dp[k]+(j-k)*w[i].p);对于每个工人的初值k=w[i].s-1;令x=j-w[i].l,如果(k-x)*w[i].p>dp[k]-dp[x],则k=x。#include#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp make_pair#define Maxn 170010#define Maxm 200010#d 阅读全文
摘要:
思路:这题对于其他能退出所有值的情况比较好像,唯一不能确定的是XXOXXOXXOXX这个形式的序列,其中XX表示未知,O表示已知。我们令num[1]=0,那么num[4]=sum[3]-sum[2]+num[1];可以递推,num[i]=sum[i-1]-sum[i-2]+num[i-3],(i%3==1)。这样求出来的每个num值就是相对于num[1]的值。假使某个num[i]=(-num[i])。所以num[1]>=max(-num[i]).同理可以求出所有相对于num[2]的值。#include#include#include#include#include#include#inc 阅读全文
摘要:
思路:我也不知道叫什么树,但是构造过程能理解。我们可以将先将边按降序排序,那么就用kruskaer构造生成树。构造好的生成树也就是满足条件的图,因为点i,j的最大流量就是生成树上点i到点j的路径上的最小权值边。但如果存在f[i][j]#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp make_pair#define Maxn 110#define Maxm 200010#define LL __int64#define Ab 阅读全文
摘要:
思路:dp[i]=min{dp[j]+max(num[j+1]...num[i])},其中sum[i]-sum[j]#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp make_pair#define Maxn 100010#define Maxm 200010#define Y 1100#define LL __int64#define Abs(x) ((x)>0?(x):(-x))#define lson(x) (x 阅读全文
摘要:
思路:做法与9*9的一样。只不过是变量。#include#include#include#include#include#include#include#include#include#include#include#define pb push_back#define mp make_pair#define Maxn 4100#define Maxm 200010#define Y 1100#define LL __int645rssss#define Abs(x) ((x)>0?(x):(-x))#define lson(x) (x='0') g[i][j+1... 阅读全文