FR #1题解
A.
建图跑最小费用最大流。分类讨论每种情况如何连边,费用怎么定。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxv 105
#define maxe 100500
#define inf 1000000000
using namespace std;
int n,m,a[maxv],b[maxv],c[maxv],d[maxv],s,t,fin[maxv],fout[maxv],g[maxv],dis[maxv],nume=,ans=,pree[maxv],prev[maxv];
bool vis[maxv];
queue <int> q;
struct edge
{
int v,f,c,nxt;
}e[maxe];
void addedge(int u,int v,int f,int c)
{
e[++nume].v=v;e[nume].nxt=g[u];
e[nume].f=f;e[nume].c=c;g[u]=nume;
e[++nume].v=u;e[nume].nxt=g[v];
e[nume].f=;e[nume].c=-c;g[v]=nume;
}
bool spfa()
{
for (int i=s;i<=t;i++) {vis[i]=false;dis[i]=inf;}
dis[s]=;q.push(s);
while (!q.empty())
{
int head=q.front();q.pop();
for (int i=g[head];i;i=e[i].nxt)
{
int v=e[i].v;
if ((e[i].f) && (dis[v]>dis[head]+e[i].c))
{
dis[v]=dis[head]+e[i].c;
pree[v]=i;prev[v]=head;
if (!vis[v]) {vis[v]=true;q.push(v);}
}
}
vis[head]=false;
}
if (dis[t]==inf) return false;
return true;
}
int dinic()
{
int u=t,dt=inf;
while (u!=s)
{
dt=min(dt,e[pree[u]].f);
u=prev[u];
}
u=t;
while (u!=s)
{
e[pree[u]].f-=dt;
e[pree[u]^].f+=dt;
u=prev[u];
}
return dis[t]*dt;
}
int main()
{
scanf("%d%d",&n,&m);s=;t=n+;
for (int i=;i<=m;i++)
{
scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
fout[a[i]]+=d[i];fin[b[i]]+=d[i];
}
for (int i=;i<=n;i++)
{
if (fin[i]>fout[i]) addedge(s,i,fin[i]-fout[i],);
else addedge(i,t,fout[i]-fin[i],);
}
addedge(n,,inf,);
for (int i=;i<=m;i++)
{
if (d[i]>c[i])
{
addedge(a[i],b[i],inf,);
addedge(b[i],a[i],d[i]-c[i],);
addedge(b[i],a[i],c[i],);
ans+=d[i]-c[i];
}
else
{
addedge(a[i],b[i],c[i]-d[i],);
addedge(a[i],b[i],inf,);
addedge(b[i],a[i],d[i],);
}
}
while (spfa()) ans+=dinic();
printf("%d\n",ans);
return ;
}
B.
奇妙的数学题。
首先for i=2 -> n是肯定的。考虑如何在log^2n的时间内得到答案。
有一个log^3n的做法是显然的。对于一个新的i,我们枚举它所有的质因数,加到一个数组里,那么这是我们的答案就是对于每个质因数的答案和上一个的答案取max(每一个质因数的答案:若2出现i次,则找到2出现次数大于i次的最小的那个n)。然后我们二分答案,通过[n/p]+[n/p^2]+[n/p^3]+....算出答案。
考虑如何优化(神来之笔)。将n看成p进制的数akak-1ak-2....a1a0。然后考虑上面那个式子的答案就是Σai*(p^i-1)/(p-1),且使上面那个式子刚好>=cnt。怎么确定数组a呢?直接贪心就好了!预处理后面关于p的多项式,之后能取大就取大。这样一定是正确的(但是我不知道为什么)。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000050
#define mod 1000000007
using namespace std;
long long n,k,prime[maxn/],tot=,mn[maxn],ans=,tab[maxn],kr=,num[maxn];
bool vis[maxn];
void get_table()
{
mn[]=;
for (long long i=;i<=maxn-;i++)
{
if (!vis[i]) {vis[i]=true;prime[++tot]=i;mn[i]=i;}
for (long long j=;j<=tot && i*prime[j]<=maxn-;j++)
{
vis[i*prime[j]]=true;mn[i*prime[j]]=prime[j];
if (!i%prime[j]) break;
}
}
}
long long ask(long long x,long long cnt)
{
if (x==-) return ;
long long lim=,ret=,ans=;tab[]=;
while (tab[ret]<=cnt) tab[++ret]=tab[ret-]*x+1LL;
ret--;
for (long long i=ret;i>=;i--)
{
ans=ans*x+cnt/tab[i];
cnt%=tab[i];
}
return ans*x;
}
int main()
{
scanf("%lld%lld",&n,&k);
get_table();
for (long long i=;i<=n;i++)
{
long long x=i,ret1=-,cnt=,rr;
while (x!=)
{
if (mn[x]!=ret1) {ans=max(ans,ask(ret1,num[ret1]*k));ret1=mn[x];}
num[mn[x]]++;
rr=mn[x];x/=mn[x];
}
ans=max(ans,ask(ret1,num[rr]*k));cnt=;
kr=(kr+ans)%mod;
}
printf("%lld\n",kr);
return ;
}
C.
杜教筛神题。。。感觉先要学一学杜教筛的东西再来看。就没写啦。
FR #1题解的更多相关文章
- FR #3题解
A. 傻逼题?...前缀和什么的随便搞搞就好了. #include<iostream> #include<cstdio> #include<cstring> #in ...
- FR #2题解
A. 考虑把(u,v)的询问离线挂在u上,然后dfs,每次从fath[x]到[x]相当于x子树dis区间加1,x子树以外区间-1,然后维护区间和区间平方和等. 常数略大. #include<io ...
- SDOI2017 Round2 详细题解
这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...
- THUSC2017 Day1题解
THUSC2017 Day1题解 巧克力 题目描述 "人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道." 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有 ...
- Codeforces Round #545 Div1 题解
Codeforces Round #545 Div1 题解 来写题解啦QwQ 本来想上红的,结果没做出D.... A. Skyscrapers CF1137A 题意 给定一个\(n*m\)的网格,每个 ...
- HNOI2018简要题解
HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- NOIP2014题解
NOIP2014题解 Day1 生活大爆炸版石头剪刀布 rps 简单模拟题,注意细节 #include<iostream> #include<cstdio> using nam ...
- NOIP2012题解
NOIP2012题解 Day1 Vigenère 密码 vigenere 直接模拟就好了,对于那张表找找规律就很短了. #include<iostream> #include<cst ...
随机推荐
- Shader for sprite clipping
Unity3D - Shader for sprite clippinghttp://stackoverflow.com/questions/23165899/unity3d-shader-for-s ...
- java synchronized静态同步方法与非静态同步方法,同步语句块
摘自:http://topmanopensource.iteye.com/blog/1738178 进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁. 对代码进行同步控制我们可以选择同步方 ...
- android - anim translate中 fromXDelta、toXDelta、fromYDelta、toXDelta属性
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http:// ...
- Ansible :一个配置管理和IT自动化工具
编译文章:LCTT https://linux.cn/article-4215-1.html 译者: felixonmars 文章地址:https://linux.cn/article-4215-1 ...
- Collecting Bugs(POJ 2096)
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3064 Accepted: 1505 ...
- 转载 jQuery validation
之前做客户端验证感觉自己javascript 不行,虽然能写出来一完整的验证,但从不自信,一直觉得客户端验证是比较繁琐的事情,但是又不能不做,只到最开始接触ajax ,遇到了一个jQuery vali ...
- myeclipse 6.5配置tomcat7.X
软件安装:myeclipse 6.5 Apache Tomcat/7.0.47 安装完成后开始配置 1. 随便展开一个tomcat配置选项,这里配置到tomcat6.x,如下图:
- Matcher类:(转)
Matcher类: 使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中 ()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的, 以及这 ...
- Sql Server 主从数据库配置
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库.主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的 ...
- LAMP整理
LAMP第一部分 查看编译了哪些软件:是编译时自动生成的 Cat /usr/local/apache2/build/config.nice 网站根目录存放处: /usr/local/apache2/h ...