[usaco2010]冲浪_slide

受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建一个水上乐园。当然,它最大的亮点就是新奇巨大的水上冲浪。

  超级轨道包含 E (1 <= E <=150,000)条小轨道连接着V (V <= 50,000)个水池,编号为1..V。每个小轨道必须按照特定的方向运行,不能够反向运行。奶牛们从1号水池出发,经过若干条小轨道,最终到达V号水池。每个水池(除了V号和1号之外,都有至少一条小轨道进来和一条小轨道出去,并且,一头奶牛从任何一个水池到达V号水池。最后,由于这是一个冲浪,从任何一个水池出发都不可能回到这个水池) 
  
  每条小轨道从水池P_i到水池Q_i (1 <= P_i <= V; 1<= Q_i <= V; P_i != Q_i),轨道有一个开心值F_i (0 <= F_i <= 2,000,000,000),Bessie总的开心值就是经过的所有轨道的开心值之和。
Bessie自然希望越开心越好,并且,她有足够长的时间在轨道上玩。因此,她精心地挑选路线。但是,由于她是头奶牛,所以,会有至多K (1 <= K <= 10)次的情况,她无法控制,并且随机从某个水池选择了一条轨道(这种情况甚至会在1号水池发生)
  如果Bessie选择了在最坏情况下,最大化她的开心值,那么,她在这种情况下一次冲浪可以得到的最大开心值是多少?
  在样例中,考虑一个超级轨道,包含了3个水池(在图中用括号表示)和4条小轨道,K的值为1(开心值在括号外表示出来,用箭头标识)

  她总是从1号水池出发,抵达3号水池。如果她总是可以自己选择,就是不会发生不能控制的情况她可以选择从1到2(这条轨道开心值为5),再从2到3(开心值为5),总的开心值为5+5=10。但是,如过她在1号水池失去控制,直接到了3,那么开心值为9,如果她在2号水池失去控制,她总的开心值为8。
  Bessie想要找到最大化开心值的方案,可以直接从1到3,这样,如果在1号水池失去控制,这样,她就不会在2号水池失去控制了,就能够得到10的开心值。因此,她的开心值至少为9。

这题最折腾人的是题目描述,语文不佳者勿入;

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iomanip>
#include<map>
#include<set>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
using namespace std;
#define LL long long
#define up(i,j,n) for(int i=(j);(i)<=(n);(i)++)
#define max(x,y) ((x)<(y)?(y):(x))
#define min(x,y) ((x)<(y)?(x):(y))
namespace OI{
const int maxn=;
struct node{
int y,next,v;
}e[],E[];
int linkk[maxn],linker[maxn],q[maxn],len=,Len=;
int n,m,k,chu[maxn];
LL f[maxn][];
void insert(int x,int y,int v){
e[++len].next=linkk[x];
linkk[x]=len;
e[len].v=v;
e[len].y=y;
E[++Len].y=x;
E[Len].next=linker[y];
linker[y]=Len;
}
void init(){
scanf("%d%d%d",&n,&m,&k);
int x,y,v;
up(i,,m){
scanf("%d%d%d",&x,&y,&v);
insert(x,y,v);chu[x]++;
}
}
void work(){
int head=,tail=,x=;
q[++tail]=n;
while(++head<=tail){
x=q[head];
for(int i=linkk[x];i;i=e[i].next)
for(int j=;j<=k;j++)f[x][j]=max(f[x][j],f[e[i].y][j]+e[i].v);
for(int i=linkk[x];i;i=e[i].next)
for(int j=;j<=k;j++)f[x][j]=min(f[x][j],f[e[i].y][j-]+e[i].v);
for(int i=linker[x];i;i=E[i].next)if(--chu[E[i].y]==)q[++tail]=E[i].y;
}
printf("%I64d\n",f[][k]);
}
}
int main(){
using namespace OI;
init();
work();
return ;
}

[usaco2008dec]万圣节采糖

每年万圣节,Fj的奶牛都要打扮一番,出门在农场里N(1<=N<=100000)个牛棚里转悠,来采集糖果,她们每走到一个未曾经过的牛棚,就会采集这个棚里1棵糖果。
Fj为了让奶牛少采集糖果,他给每个牛棚设置了一个”后继牛棚”,牛棚i的后继牛棚是Xi,他告诉奶牛们,她们到了一个牛棚后,只要再往后继牛棚走去,就可以搜集到更多的糖果。
第i只奶牛从牛棚i开始她的旅程。请你计算,每一只奶牛可以采集到多少 糖果。

各种方法都可以做,我直接上最暴力的方法了;

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iomanip>
#include<map>
#include<set>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
using namespace std;
#define LL long long
#define up(i,j,n) for(int i=(j);(i)<=(n);(i)++)
#define max(x,y) ((x)<(y)?(y):(x))
#define min(x,y) ((x)<(y)?(x):(y))
#define FILE "1"
namespace OI{
const int maxn=;
int a[maxn],x,y,cnt=,ru[maxn],ans[maxn],f[maxn];
int n;
int q[maxn],head=,tail=;
vector<int> G[maxn];
bool vis[maxn];
void init(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
ru[a[i]]++;G[a[i]].push_back(i);
}
}
void dfs3(int fa,int x){
ans[x]=ans[fa]+;
for(int i=;i<G[x].size();i++){
if(!ans[G[x][i]])dfs3(x,G[x][i]);
}
}
void bfs(int fa,int s){
tail=,head=;
q[++tail]=s;f[s]=fa;
while(++head<=tail){
x=q[head];ans[x]=ans[f[x]]+;
for(int j=;j<G[x].size();j++){
if(!ans[G[x][j]]){
f[G[x][j]]=x;
q[++tail]=G[x][j];
}
}
}
}
void work(){
up(i,,n)if(!ru[i])q[++tail]=i;
while(++head<=tail){
x=q[head];vis[x]=;
if(--ru[a[x]]==)q[++tail]=a[x];
}
up(i,,n)if(!vis[i]){
int u=i;cnt=;
do{cnt++;vis[u]=;u=a[u];
}while(u!=i);
do{ans[u]=cnt;u=a[u];
}while(u!=i);
do{
for(int j=;j<G[u].size();j++){
if(!ans[G[u][j]])bfs(u,G[u][j]);
}
u=a[u];
}while(i!=u);
}
up(i,,n)printf("%d\n",ans[i]);
}
void slove(){
init();
work();
}
} int main(){
using namespace OI;
slove();
}

P1604&P1601的更多相关文章

  1. 题解 P1601 【A+B Problem(高精)】

    P1601 A+B Problem(高精) 题目描述 高精度加法,x相当于a+b problem,b不用考虑负数. 输入输出格式 输入格式: 分两行输入a,b<=10^500 输出格式: 输出只 ...

  2. 题解-洛谷P1601 A+B Problem(高精)

    https://www.luogu.org/problemnew/show/P1601(题目传送) 显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加.这里用到大数据的高精度 ...

  3. P1601 A+B Problem(高精)

    原题链接 https://www.luogu.org/problemnew/show/P1601 这个题提示的很清楚,并非简单的A+B,单纯的long  long型也不行(不要被样例所迷惑).因为lo ...

  4. [uva P1601] The Morning after Halloween

    [uva P1601] The Morning after Halloween 题目链接 非常经典的一道题目,lrj的书上也有(貌似是紫书?). 其实这题看起来就比较麻烦.. 首先要保证小鬼不能相遇, ...

  5. 洛谷——P1604 B进制星球

    P1604 B进制星球 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2 ...

  6. 洛谷【P1601】A+B Problem(高精)

    题目传送门:https://www.luogu.org/problemnew/show/P1601 高精度加法板子.我们灵性地回忆一波小学学加法列竖式的场景(从\(6\)岁开始口算从未打过草稿的大佬请 ...

  7. 洛谷 P1604 B进制星球

    P1604 B进制星球 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2 ...

  8. 洛谷 P1601 A+B Problem(高精)

    P1601 A+B Problem(高精) 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式 ...

  9. 洛谷 题解 P1604 【B进制星球】

    题目:P1604 B进制星球 本人提交记录:R6292872 作为一个极其无聊的人,我没事干地写了operator... 思路很简单: 读入b 读入b进制的x,y ans = x + y 输出ans ...

随机推荐

  1. 洛谷—— P3865 【模板】ST表

    https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每 ...

  2. Java中String/StringBuffer/StringBuilder区别(转)

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...

  3. Golang协程与通道整理

    协程goroutine        不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换.Go在底层进行协助实现      涉及系统调用的地方由Go标准库协助释放CPU      总之,不通 ...

  4. apache一个IP绑定多个域名

    用ServerAlias <VirtualHost *:80>ServerAdmin i@kuigg.comDocumentRoot /www/kuigg.comServerName ku ...

  5. Toolbar的使用.md

    1.什么是Toolbar Toolbar是在Android5.0时出现的一个新控件,其目的用于取代Actionbar,它与Actionbar最大的差别就是Toolbar使用更加灵活.自由,而且Tool ...

  6. hadoop安全之hftp

    hftp默认是打开的,同意以浏览器的方式訪问和下载文件,以此方式下,能够读取全部文件,留下了安全隐患. 測试例如以下 /user/hive/warehouse/cdntest.db/selfreado ...

  7. python(24)- 面向对象进阶

    面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...

  8. webpack实用配置总结

    1.webpack.config.js配置文件为: //处理共用.通用的js var webpack = require('webpack'); //处理html模板 var htmlWebpackP ...

  9. 轻松搞定RabbitMQ(一)——RabbitMQ基础知识+HelloWorld

    转自 http://blog.csdn.net/xiaoxian8023/article/details/48679609 本文是简单介绍一下RabbitMQ,参考官网上的教程.同时加入了一些自己的理 ...

  10. POJ1830开关问题——gauss消元

    题目链接 分析: 第一个高斯消元题目,操作是异或.奇偶能够用0.1来表示,也就表示成bool类型的方程,操作是异或.和加法没有差别 题目中有两个未知量:每一个开关被按下的次数(0.1).每一个开关的转 ...