抽空在vjudge上做了这套题。剩下FZU 2208数论题不会。

FZU 2205

这是个想法题,每次可以在上一次基础上加上边数/2的新边。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=; int f[N];
int main () {
f[]=;
for (int i=;i<=;i++) {
f[i]=f[i-]+i/;
}
int T;
cin>>T;
while (T--) {
int n;
cin>>n;
cout<<f[n]<<endl;
}
return ;
}

FZU 2206

乍看不知道什么东西,直接在机器上跑几个数字可以试出来结论。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=;
const int INF=0x3f3f3f3f; int main () {
//freopen("out.txt","r",stdin);
int T;
scanf("%d",&T);
for (int cas=;cas<=T;cas++) {
long long n;
scanf("%I64d",&n);
if (n<20150001LL) cout<<n+<<endl;
else cout<<<<endl;
}
return ;
}

FZU 2207

会用倍增算LCA的话,这题也肯定会做。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=; vector<int>e[N];
int fa[N][];
int dep[N];
void dfs(int u,int f,int d) {
dep[u]=d;
for (int i=;i<e[u].size();i++) {
int v=e[u][i];
if (v==f) continue;
dfs(v,u,d+);
fa[v][]=u;
}
} void calc(int n) {
for (int j=;j<=;j++) {
for (int i=;i<=n;i++) {
fa[i][j]=fa[fa[i][j-]][j-];
}
}
} int kthA(int u,int k) {
for (int i=;i>=;i--) {
if (k>=(<<i)){
k-=(<<i);
u=fa[u][i];
}
}
return u;
} int lca(int u,int v) {
if (dep[u]<dep[v]) swap(u,v);
int d=dep[u]-dep[v];
u=kthA(u,d);
if (u==v) return u;
for (int i=;i>=;i--) {
if (fa[u][i]==fa[v][i])
continue;
u=fa[u][i];
v=fa[v][i];
}
return fa[u][];
}
int main () {
int T;
scanf("%d",&T);
while (T--) {
int n,m;
scanf("%d %d",&n,&m);
for (int i=;i<=n;i++)
e[i].clear();
for (int i=;i<n;i++) {
int u,v;
scanf("%d %d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
dfs(,-,);
calc(n);
static int cas=;
printf("Case #%d:\n",cas++);
while (m--) {
int u,v,k;
scanf("%d %d %d",&u,&v,&k);
int ans=lca(u,v);
if (k==) {
printf("%d\n",u);
continue;
}
else if (k==dep[u]-dep[ans]+dep[v]-dep[ans]+) {
printf("%d\n",v);
continue;
}
if (dep[u]-dep[ans]+>=k) {
int ret=kthA(u,k-);
printf("%d\n",ret);
}
else {
int to=dep[u]-dep[ans]+dep[v]-dep[ans]+-k;
int ret=kthA(v,to);
printf("%d\n",ret);
}
}
}
return ;
}

FZU 2208

数论题,不会

FZU 2209

分层图。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=;
const int INF=0x3f3f3f3f;
int get(int n,int u,int k) {
return k*n+u;
}
struct Edge {
int to,next,len;
Edge() {}
Edge(int _to,int _next,int _len):to(_to),next(_next),len(_len) {}
} edge[];
int idx=,head[N];
inline void addedge(int u,int v,int l) {
edge[++idx]=Edge(v,head[u],l);
head[u]=idx;
}
int dis[N][N],in[N];
bool vis[N];
bool spfa(int s,int n,int *dis) {
fill(dis,dis+N,INF);
memset(vis,false,sizeof(vis));
memset(in,,sizeof(in));
dis[s]=;
vis[s]=true;
queue<int> que;
que.push(s);
in[s]=;
while (!que.empty()) {
int u=que.front();
que.pop();
vis[u]=false;
for (int k=head[u];k;k=edge[k].next) {
int v=edge[k].to;
if (dis[v]>dis[u]+edge[k].len) {
dis[v]=dis[u]+edge[k].len;
if (!vis[v]) {
vis[v]=true;
in[v]++;
if (in[v]>n) return false;
que.push(v);
}
}
}
}
return true;
}
int main () {
//freopen("out.txt","r",stdin);
int T;
scanf("%d",&T);
for (int cas=;cas<=T;cas++) {
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
idx=;memset(head,,sizeof head);
for (int i=;i<=m;i++) {
int u,v;
scanf("%d %d",&u,&v);
int d;
for (int i=;i<;i++) {
scanf("%d",&d);
int uu=get(n,u,i);
int vv=get(n,v,(i+d)%);
addedge(uu,vv,d);
uu=get(n,v,i);
vv=get(n,u,(i+d)%);
addedge(uu,vv,d);
}
}
for (int i=;i<;i++) {
spfa(get(n,,i),n*,dis[i]);
}
printf("Case #%d:",cas);
while (k--) {
int v,s;
scanf("%d %d",&v,&s);
//cout<<"from "<<get(n,1,s)<<endl;
int ret=0x3f3f3f3f;
for (int i=;i<;i++) {
int p=get(n,v,i);
ret=min(ret,dis[s][p]);
}
if (ret==0x3f3f3f3f) ret=-;
printf(" %d",ret);
}
puts("");
}
return ;
}

FZU 2210

建立一个虚拟节点,连向所有粮仓,枚举所有禁止的城市,从虚拟节点dfs,更新答案。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=; vector<int>e[N];
int in[N];
bool vis[N];
int fob;
int cnt;
void dfs(int u) {
if (u==fob||vis[u]) return;
vis[u]=true;cnt++;
for (int i=;i<e[u].size();i++) {
int v=e[u][i];
dfs(v);
}
}
int main () {
int n,m;
while (scanf("%d %d",&n,&m)!=EOF) {
for (int i=;i<=n;i++){
e[i].clear();
in[i]=;
}
for (int i=;i<=m;i++) {
int u,v;
scanf("%d %d",&u,&v);
e[u].push_back(v);
in[v]++;
}
for (int i=;i<=n;i++) {
if (in[i]==)
e[].push_back(i);
}
int ret=n+,val=;
for (int i=n;i>=;i--) {
fob=i;
memset(vis,false,sizeof vis);
cnt=;
dfs();
cnt--;
if (n-cnt>=val) {
val=n-cnt;
ret=i;
}
}
cout<<ret<<endl;
}
return ;
}

FZU 2211

费用流,把所有蘑菇拆成两个点,根据时间关系,互相连边。农田的限制在于源点出来的流的大小。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=;
const int INF=0x3f3f3f3f; struct Edge{
int to,next,f;
long long c;
Edge(){}
Edge(int _to,int _nxt,int _f,long long _c):to(_to),next(_nxt),f(_f),c(_c){}
}edge[N<<]; int head[N],idx;
bool vis[N];
long long dis[N];
int pree[N],prev[N];
void addedge(int u,int v,int flow,long long cost){
edge[++idx]=Edge(v,head[u],flow,cost);
head[u]=idx;
edge[++idx]=Edge(u,head[v],,-cost);
head[v]=idx;
}
bool spfa(int s,int e){
memset(vis,,sizeof(vis));
memset(pree,-,sizeof(pree));
memset(prev,-,sizeof(prev));
for (int i=;i<N;i++) dis[i]=~0ULL>>;
dis[s]=;
vis[s]=true;
queue<int>que;
que.push(s);
while (!que.empty()){
int cur=que.front();
que.pop();
vis[cur]=false;
for (int k=head[cur];k;k=edge[k].next){
if (edge[k].f){
int n=edge[k].to;
if (dis[n]>dis[cur]+edge[k].c){
dis[n]=dis[cur]+edge[k].c;
prev[n]=cur;
pree[n]=k;
if (!vis[n]){
vis[n]=true;
que.push(n);
}
}
}
}
}
if (dis[e]>=INF) return ;
return ;
}
long long minCostMaxFlow(int src,int sink){
long long cur,min_val;
long long ansf=,ansc=;
while (spfa(src,sink)){
cur=sink;
min_val=INF;
while (prev[cur]!=-){
if (min_val>edge[pree[cur]].f)
min_val=edge[pree[cur]].f;
cur=prev[cur];
}
cur=sink;
while (prev[cur]!=-){
edge[pree[cur]].f-=min_val;
edge[pree[cur]^].f+=min_val;
cur=prev[cur];
}
ansc+=dis[sink]*min_val;
ansf+=min_val;
}
return ansc;
} int s[N],t[N],v[N];
int main () {
int T;
scanf("%d",&T);
for (int cas=;cas<=T;cas++) {
int n,m;
scanf("%d %d",&n,&m);
for (int i=;i<=m;i++) {
scanf("%d %d %d",s+i,t+i,v+i);
}
idx=;memset(head,,sizeof head);
for (int i=;i<=m;i++) {
for (int j=;j<=m;j++) {
if (t[i]<s[j]) {
addedge(i+m,j,INF,);
}
}
}
int s=m+m+,t=m+m++;
for (int i=;i<=m;i++) {
addedge(,i,INF,);
addedge(i,i+m,,-v[i]);
addedge(i+m,t,INF,);
}
addedge(s,,n,);
long long ret=-minCostMaxFlow(s,t);
cout<<ret<<endl;
}
return ;
}

FOJ 11月月赛题解的更多相关文章

  1. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  2. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...

  3. csu-2018年11月月赛Round2-div2题解

    csu-2018年11月月赛Round2-div2题解 A(2193):昆虫繁殖 Description 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对 ...

  4. BZOJ5091 摘苹果 BZOJ2017年11月月赛 概率,期望

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5091 11月月赛B题 题意概括 题解 代码 #include <cstring> #i ...

  5. BZOJ5090 组题 BZOJ2017年11月月赛 二分答案 单调队列

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5090 11月月赛A题 题意概括 给出n个数. 求连续区间(长度大于等于k)最大平均值. 题解 这题 ...

  6. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  7. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  8. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  9. LG 11 月 月赛 II T4

    LG 11 月 月赛 II T4 看到膜数和 $ 10^5 $ 以及 $ n^2 $ 的部分分想到很可能是 NTT 于是开始推式子 首先看到式子可以化作, 如果 \(k = 0\) , $ f(l , ...

随机推荐

  1. 妙用 `package.json` 快速 `import` 文件(夹)

    前言 import router from './router'; import router from '../../router'; import router from './../../../ ...

  2. .NET Core跨平台:.NET Core项目部署到linux(Centos7)

    1.开篇说明 a 上篇博客简单的说明了一下 使用.NET Core开发的一个总结,地址是:(http://www.cnblogs.com/hanyinglong/p/6442148.html),那么这 ...

  3. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  4. WCF请求数据:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。

    通常情况下,写好WCF服务后都会用自带的WCFClient工具进行测试,在进行时数据请求的时候,如果返回数据量超过默认接收值的时候就会提示如图异常错误. 错误也提示的很清楚,无非就是修改接收值大小的问 ...

  5. checkSelfPermission 找不到 Android 动态权限问题

    checkSelfPermission 找不到 Android 动态权限问题  最近写了一个Demo,以前好好地.后来手机更新了新系统以后,不能用总是闪退.而且我的小伙伴的是android 7.0系统 ...

  6. Web API框架学习——路由(一)

    HttpConfiguration(ASP.NET Web API管道的配置是通过HttpConfiguration来完成) : 包括路由注册在内的对整个ASP.NET Web API管道的配置是通过 ...

  7. WebService从服务端到客户端的用例

    1.首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下: <?xml version="1.0" en ...

  8. iOS开发之UIApplication和delegate

    1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...

  9. elasticsearch使用river同步mysql数据

    ====== mysql的river介绍======      - 什么是river?river代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法.它是以插件方式存在的一个e ...

  10. windows下搭建tensorflow的环境

    这年头,不会点人工智能和神经网络,都不好意思跟人打招呼了.之前搞了一下sklearn,今天觉得应该要了解一下google这个传说中的人工智能开源神器. 最近终于有时间了,凡事从hello world开 ...