博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1916: [Usaco2010 Open]冲浪
阅读量:5297 次
发布时间:2019-06-14

本文共 2008 字,大约阅读时间需要 6 分钟。

n<=50000个点m<=150000的带边权DAG,保证1入度0,n出度0,其他点入度出度均不为0,求:从一号点开始到n,期间有可能K<=10次随机选边走,最坏情况下总边权多少。

没理解题意系列。。问了唐神T_T题目是说,这个牛已经知道会有这种情况,所以在除了K次剩下的时间里它会选最优方案走,而如果此点最优方案比乱走方案优,那么在最坏情况下这个点也要乱走,所以在“最优”与“乱走”去min。

f[i,j]表示点i到点n,乱j次最小边权和,f[i,j]=min(max(f[k,j]+e(i,k)),min(f[k,j-1]+e(i,k))。

写bfs的话注意f定义域!!!!

1 #include
2 #include
3 #include
4 #include
5 //#include
6 using namespace std; 7 8 int n,m,K; 9 #define maxm 30001110 #define maxn 5001111 struct Edge{
int to,v,next;}edge[maxm];int first[maxn],back[maxn],le=2;12 void in(int x,int y,int v,int* first) {Edge &e=edge[le];e.to=y;e.v=v;e.next=first[x];first[x]=le++;}13 #define LL long long14 int du[maxn],last[maxn];LL f[maxn][13],dis[maxn];15 int x,y,v,que[maxn],head,tail;16 const LL inf=1e15;17 void play(int x)18 {19 for (int i=back[x];i;i=edge[i].next)20 {21 const Edge &e=edge[i];22 du[e.to]--;23 if (!du[e.to]) que[tail++]=e.to;24 }25 if (x==n)26 {27 for (int i=1;i<=K;i++) f[x][i]=-inf;28 f[x][0]=0;return;29 }30 LL Max=-inf,Min=inf;31 for (int j=0;j<=K;j++)32 {33 for (int i=first[x];i;i=edge[i].next)34 {35 const Edge &e=edge[i];36 if (f[e.to][j]>=0) Max=max(Max,f[e.to][j]+e.v);37 if (j && f[e.to][j-1]>=0) Min=min(Min,f[e.to][j-1]+e.v);38 }39 f[x][j]=Max<0?(Min<0?-inf:Min):(Min<0?Max:min(Max,Min));40 }41 }42 int main()43 {44 scanf("%d%d%d",&n,&m,&K);45 memset(du,0,sizeof(du));46 for (int i=1;i<=m;i++)47 {48 scanf("%d%d%d",&x,&y,&v);49 in(x,y,v,first);50 in(y,x,v,back);51 du[x]++;52 }53 head=tail=0;54 for (int i=1;i<=n;i++) if (!du[i]) que[tail++]=i;55 while (head!=tail) play(que[head++]);56 printf("%lld\n",f[1][K]);57 return 0;58 }
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/7512305.html

你可能感兴趣的文章
安卓当中的线程和每秒刷一次
查看>>
随机颜色值
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
目录相关的操作
查看>>
C++----练习--引用头文件
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
FUSE-用户空间文件系统
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
bash使用规则
查看>>
AVL数
查看>>
C语言程序设计II—第九周教学
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
基础类型
查看>>
属性动画
查看>>
标识符
查看>>