https://www.luogu.org/problem/show?pid=U10223#sub

题目背景

众所周知,Cx是一个宇宙大犇。Cx能文善武,一直在为大一统的实现而努力奋斗着。Cx将调用他的精锐军队,一个精锐士兵最多可以战胜十个埃及士兵。同时Cx是个爱才的人,他想要制定一份能使在占领埃及的前提下,使自己的军队损失最小的作战方案。Cx可做好了充分的准备,他收集到了很多情报,经过了长期的准备,在今天这个伟大的日子,他终于作下了远征埃及的决定!

题目描述

Cx将会把他收集到的所有情报都汇总给你(当然不能有什么遗漏的),情报的内容包括了埃及的所有城市所驻扎的军队人数,和与其单向连通的城市(路程什么的对千里马来说不算什么)。编号1的城市即为首都,占领首都即战争胜利!他将会告诉你他调度的军队人数。

输入输出格式

输入格式:

第一行三个整数n和m,sum。n表示埃及的所有城市个数,m表示Cx大帝开始出征的城市标号,sum表示精锐军队的人数。

以下的n行,第i+1行即为关于埃及编号为i的城市的情报,第一个整数ai表示在此驻扎的军队人数,第二个整数pi表示与此城市连通的城市数目,接下来pi个整数为与其连通的城市编号。

输出格式:

第一行输出Cx大帝要想完成占领埃及的目标的最优攻占城市顺序方案。第二行输出精锐军队剩余的人数,详细格式见输出样例。如军队的人数过少无法使Cx大帝占领埃及,则输出"No way!”

输入输出样例

输入样例#1:

4 3 10
30 0
13 1 1
7 2 4 2
3 1 1
输出样例#1:

3->4->1
6

说明

样例说明:最少需要对付的埃及士兵为40个,而精锐士兵以一敌十,所以最后还有6个存活。 数据保证p1=0。

士兵杀8个死不了,下一次再解决两个就GG了。

对于100%的数据: 2<=n<=50000 pi<=100

 #include <algorithm>
#include <cstdio>
#include <queue> using namespace std; const int M(+);
const int N(+);
const int INF();
int n,s,sum,v,nn,w[N]; int head[N],sumedge;
struct Edge
{
int v,next;
Edge(int v=,int next=):
v(v),next(next){}
}edge[M*N];
void ins(int u,int v)
{
edge[++sumedge]=Edge(v,head[u]);
head[u]=sumedge;
} queue<int>que;
int inq[N],dis[N],pre[N];
void SPFA(int s)
{
for(int i=;i<=n;i++) dis[i]=INF;
dis[s]=w[s];
inq[s]=;
que.push(s);
for(;!que.empty();)
{
int fro=que.front(); que.pop(); inq[fro]=;
for(int i=head[fro];i;i=edge[i].next)
{
v=edge[i].v;
if(dis[v]>dis[fro]+w[v])
{
dis[v]=dis[fro]+w[v];
pre[v]=fro;
if(!inq[v])
{
inq[v]=;
que.push(v);
}
}
}
}
} int main()
{
scanf("%d%d%d",&n,&s,&sum);
for(int i=;i<=n;i++)
{
scanf("%d%d",&w[i],&nn);
for(int j=;j<=nn;j++)
scanf("%d",&v),ins(i,v);
}
int k[N],pos=;
SPFA(s);
sum=sum-dis[]/;
if(sum<) printf("No way!");
else
{
int start=,end=s;
for(;start!=end;start=pre[start])
k[++pos]=start;
printf("%d",s);
for(int i=pos;i>=;i--) printf("->%d",k[i]);
printf("\n%d",sum);
}
return ;
}

洛谷——U10223 Cx大帝远征埃及的更多相关文章

  1. 洛谷 U10223 Cx大帝远征埃及

    题目背景 众所周知,Cx是一个宇宙大犇.Cx能文善武,一直在为大一统的实现而努力奋斗着.Cx将调用他的精锐军队,一个精锐士兵最多可以战胜十个埃及士兵.同时Cx是个爱才的人,他想要制定一份能使在占领埃及 ...

  2. 洛谷 U10206 Cx的治疗

    题目背景 「Cx的故事」众所周知,Cx是一个宇宙大犇.由于Cx在空中花园失足摔下,导致他那蕴含着无穷智慧的大脑受到了严重的损伤,许多的脑神经断裂.于是,Cx的wife(有么?)决定请巴比伦最好的医师治 ...

  3. 洛谷——U10206 Cx的治疗

    https://www.luogu.org/problem/show?pid=U10206 题目背景 「Cx的故事」众所周知,Cx是一个宇宙大犇.由于Cx在空中花园失足摔下,导致他那蕴含着无穷智慧的大 ...

  4. [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)

    [NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...

  5. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

  6. 洛谷 P1724 东风早谷苗

    洛谷 P1724 东风早谷苗 题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走, ...

  7. 浅谈分治 —— 洛谷P1228 地毯填补问题 题解

    如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...

  8. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  9. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. 如何获取repeater某行第一列的值

    <div> <asp:Repeater ID="Repeater1" runat="server" DataMember="Defa ...

  2. 启动和停止Service

    activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  3. Boolean operations between triangle meshes

    Boolean operations between triangle meshes eryar@163.com Abstract. Boolean operations is one of basi ...

  4. Unity3D:粒子系统Particle System

    1. GameObject → Create Other  →  Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: ...

  5. 变量get、set设置

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. solrj简介

    SolrJ基于httpClient: 使用SolrJ操作Solr会比利用httpClient来操作Solr要简单. SolrJ是封装了httpClient方法,来操作solr的API的. SolrJ底 ...

  7. POJ 2185 正解 KMP

    题意: 思路: 把每一行压成一个数 求一下 KMP 把每一列压成一个数 求一下KMP 答案就是两个周期之积 网上的好多题解都是错的---------.. //By SiriusRen #include ...

  8. javafx drag

    public class EffectTest extends Application { @Override public void start(Stage stage) { stage.setTi ...

  9. mkfs---创建Linux文件系统

    [root@xiaolizi ~]# mkfsmkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs ...

  10. groupadd---创建一个新的工作组

    groupadd命令   groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中. 语法 groupadd(选项)(参数) 选项 -g:指定新建工作组的id: -r:创建系统工 ...