BSOJ3760||洛谷P1453 城市环路 题解
城市环路
Description
整个城市可以看做一个N个点,N条边的单圈图(保证图连通),唯一的环便是绕城的环路。保证环上任意两点有且只有2条路径互通。图中的其它部分皆隶属城市郊区。
现在,有一位名叫Jim的同学想在B市开店,但是任意一条边的2个点不能同时开店,每个点都有一定的人流量Pi,在该点开店的利润就等于该店的人流量Pi×K(K≤10000),K的值将给出。
Jim想尽量多的赚取利润,请问他应该在哪些地方开店?
Input
第二行N个正整数,表示每个点的人流量Pi(Pi≤10000)。
下面N行,每行2个整数A,B,表示A,B建有一条双向路。
最后一行一个实数K。
Output
Sample Input
1 2 1 5
0 1
0 2
1 2
1 3
2
Sample Output
Hint
对于20%的数据 N≤100.
对于50%的数据 N≤2000.
对于100%的数据 N≤100000.

#include<cstring>
#include<cstdio>
#include<cmath>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
inline const int Read()
{
int Num=,Sgn=;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')Sgn=-;ch=getchar();}
while(isdigit(ch)){Num=(Num<<)+(Num<<)+ch-'';ch=getchar();}
return Num*Sgn;
} struct Edge
{
int Next,To;
}e[];
int h[]={},Cnt=;
void Addedge(int x,int y){e[++Cnt]=(Edge){h[x],y}; h[x]=Cnt;}
int a[]={};
double K;
int N; int Scnt=;
int DFN[]={},Lowlink[]={};
int Cir[]={},Belong[]={},Prt[]={};
int f[][]={},g[][]={}; stack<int>Sta; void Tarjan(int x)
{
Scnt++;
DFN[x]=Scnt; Lowlink[x]=Scnt;
Sta.push(x);
for(int i=h[x];i;i=e[i].Next)
{
int y=e[i].To;
if(!DFN[y])
{
Prt[y]=x;
Tarjan(y);
Lowlink[x]=min(Lowlink[x],Lowlink[y]);
}
else if(Prt[x]!=y)
Lowlink[x]=min(Lowlink[x],DFN[y]);
}
if(Lowlink[x]==DFN[x])
{
if(Sta.top()==x)
{
Sta.pop();
return;
}
int t;
do
{
t=Sta.top(); Sta.pop();
Cir[++Cir[]]=t;
Belong[t]=;
}while(t!=x);
}
} void DFS(int x)
{
f[x][]=; f[x][]=a[x];
for(int i=h[x];i;i=e[i].Next)
{
int y=e[i].To;
if(Prt[x]!=y&&!Belong[y])
{
Prt[y]=x;
DFS(y);
f[x][]+=max(f[y][],f[y][]);
f[x][]+=f[y][];
}
}
} int main()
{
N=Read();
for(int i=;i<=N;i++)
a[i]=Read();
for(int i=;i<=N;i++)
{
int Tx=Read(),Ty=Read();
Addedge(Tx+,Ty+); Addedge(Ty+,Tx+);
}
scanf("%lf",&K);
Tarjan();
int M=Cir[];
memset(Prt,,sizeof(Prt));
for(int i=;i<=M;i++)
DFS(Cir[i]);
for(int i=;i<=M;i++)
{
g[i][]=f[Cir[i]][];
g[i][]=f[Cir[i]][];
} f[][]=g[][]+g[][];
f[][]=g[][]+g[][];
for(int i=;i<=M;i++)
{
f[i][]=f[i-][]+g[i][];
f[i][]=max(f[i-][],f[i-][])+g[i][];
}
int Ans=;
Ans=max(f[M][],max(Ans,f[M][]));
f[][]=g[][]+g[][];
f[][]=-0x3f3f3f3f;
for(int i=;i<=M;i++)
{
f[i][]=max(f[i-][],f[i-][])+g[i][];
f[i][]=f[i-][]+g[i][];
}
Ans=max(Ans,f[M][]);
printf("%.1lf\n",(double)Ans*K);
return ;
}
一开始忘了环形要跑两遍...真是⑨一般的错误啊(笑)
BSOJ3760||洛谷P1453 城市环路 题解的更多相关文章
- 洛谷 P1453 城市环路 ( 基环树树形dp )
题目链接 题目背景 一座城市,往往会被人们划分为几个区域,例如住宅区.商业区.工业区等等.B市就被分为了以下的两个区域--城市中心和城市郊区.在着这两个区域的中间是一条围绕B市的环路,环路之内便是B市 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- 【洛谷P3410】拍照题解(最大权闭合子图总结)
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
随机推荐
- Linux修改用户所在组方法
Linux修改用户所在组方法 usermod -g 用户组 用户名强行设置某个用户所在组usermod -G 用户组 用户名把某个用户改为 group(s) usermod -a -G 用户组 用户名 ...
- python3 字典update与deepcopy
问题概述: 在码代码中,需要保存一个字典,用的update,后来发现update的值会随着原字典值得变化而变化. 而后使用deepcopy来保存字典. update a = {1:{2:3}}b= { ...
- MM-移动类型
链接:SAP移动类型 移动类型 备注 业务类型 SAP中事务代码 备注 101 采购订单收货.生产订单收货 收货 migo CO11N顶层处理移动类型\跨工厂收货 102 采购订单收货冲销 收货 ...
- jakarta-taglibs-standard-1.1.0查找下载
- Django项目创建
一.创建方式 1.命令行创建: 2.pycharm创建项目: 二.创建MySQL数据库 三.修改配置文件链接数据库 修改python连接数据库方式 四.Django配置 1.添加app项目 2.修改h ...
- Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)
Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea ...
- 如果测试UI
1. 先分享几个链接 https://www.ranorex.com/resources/testing-wiki/gui-testing/ https://www.tutorialspoint.co ...
- 【C++】C++string类总结
一.string的初始化 首先,为了在程序中使用string类型,必须包含头文件 <string>.如下: #include <string> 注意这里不是string.h,s ...
- java课程之团队开发冲刺1.6
一.总结昨天进度 1.依照视频学习了sqlite,但是由于视频的不完整性导致并不知道代码的实际效果怎么样. 二.遇到的问题 1.依据上一条,在date目录下date文件夹中,的确发现了数据库的文件,但 ...
- tarjan求强连通分量
http://poj.org/problem?id=3180 //#include<bits/stdc++.h> #include<iostream> #include< ...