2015弱校联盟(2) - J. Usoperanto
J. Usoperanto
Time Limit: 8000ms
Memory Limit: 256000KB
Usoperanto is an artificial spoken language designed and regulated by Usoperanto Academy. The academy is now in study to establish Strict Usoperanto, a variation of the language intended for formal documents.
In Usoperanto, each word can modify at most one other word, and modifiers are always put before modifiees. For example, with a noun uso (“truth”) modified by an adjective makka (“total”), people say makka uso, not uso makka. On the other hand, there have been no rules about the order among multiple words modifying the same word, so in case uso is modified by one more adjective beta (“obvious”), people could say both makka beta uso and beta makka uso.
In Strict Usoperanto, the word order will be restricted according to modification costs. Words in a phrase must be arranged so that the total modification cost is minimized. Each pair of a modifier and a modifiee is assigned a cost equal to the number of letters between the two words; the total modification cost is the sum of the costs over all modifier-modifiee pairs in the phrase. For example, the pair of makka and uso in a phrase makka beta uso has the cost of 4 for beta (four letters). As the pair of beta and uso has no words in between and thus the cost of zero, makka beta uso has the total modification cost of 4. Similarly beta makka uso has the total modification cost of 5. Applying the “minimum total modification cost” rule, makka beta uso is preferred to beta makka uso in Strict Usoperanto.
Your mission in this problem is to write a program that, given a set of words in a phrase, finds the correct word order in Strict Usoperanto and reports the total modification cost.
Input
The format of the input is as follows.
N
M0 L0
...
MN-1 LN-1
The first line contains an integer N (1 ≤ N ≤ 106). N is the number of words in a phrase.
Each of the following N lines contains two integers Mi (1 ≤ Mi ≤ 10) and Li (-1 ≤ Li ≤ N - 1, Li ≠ i) describing the i-th word (0 ≤ i ≤ N-1). Mi is the number of the letters in the word. Li specifies the modification: Li = -1 indicates it does not modify any word; otherwise it modifies the Li-th word.
Note the first sample input below can be interpreted as the uso-beta-makka case.
Output
Print the total modification cost.
Sample Input 1
3
3 -1
4 0
5 0
Output for the Sample Input 1
4
Sample Input 2
3
10 -1
10 0
10 1
Output for the Sample Input 2
0
Sample Input 3
4
1 -1
1 0
1 1
1 0
Output for the Sample Input 3
1
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int Max = 1e6+100;
vector<int>E[Max];
int Len[Max];
int to[Max];
int num[Max],n;
LL ans;
bool cmp(int a,int b)
{
return Len[a]<Len[b];
}
void bfs()
{
queue<int>Q;
memset(num,0,sizeof(num));
for(int i=0;i<n;i++)
{
if(!E[i].size())//将没有被修饰词放进队列
{
Q.push(i);
}
}
while(!Q.empty())
{
int u=Q.front();
Q.pop();
sort(E[u].begin(),E[u].end(),cmp);//将修饰词按长度从小到大排序,只有这样才能保证花费是最小的.如果修饰词也被修饰,则将他们看做一个整体,长度为他们的总长度.
int len=E[u].size();
for(int i=0,j=len-1;i<len;i++,j--)
{
Len[u]+=Len[E[u][i]];
ans+=(Len[E[u][i]])*j;
}
if(to[u]!=-1)
{
num[to[u]]++;
if(num[to[u]]==E[to[u]].size())//如果被修饰词的所有的修饰词计算完毕,就入队列
{
Q.push(to[u]);
}
}
}
}
int main()
{
int b;
while(~scanf("%d",&n))
{
memset(E,0,sizeof(E));
for(int i=0;i<n;i++)
{
scanf("%d %d",&Len[i],&b);
to[i]=b;//记录自己所修饰的词的位置
if(b!=-1)
{
E[b].push_back(i);//建立边
}
}
ans=0;
bfs();
cout<<ans<<endl;
}
return 0;
}
2015弱校联盟(2) - J. Usoperanto的更多相关文章
- 2015弱校联盟(1) -J. Right turn
J. Right turn Time Limit: 1000ms Memory Limit: 65536KB frog is trapped in a maze. The maze is infini ...
- 2015弱校联盟(1) - C. Censor
C. Censor Time Limit: 2000ms Memory Limit: 65536KB frog is now a editor to censor so-called sensitiv ...
- 2015弱校联盟(1) - B. Carries
B. Carries Time Limit: 1000ms Memory Limit: 65536KB frog has n integers a1,a2,-,an, and she wants to ...
- 2015弱校联盟(1) - I. Travel
I. Travel Time Limit: 3000ms Memory Limit: 65536KB The country frog lives in has n towns which are c ...
- 2015弱校联盟(1) -A. Easy Math
A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...
- 2015弱校联盟(1) - E. Rectangle
E. Rectangle Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name ...
- (2016弱校联盟十一专场10.3) B.Help the Princess!
题目链接 宽搜一下就行. #include <iostream> #include<cstdio> #include<cstring> #include<qu ...
- (2016弱校联盟十一专场10.3) A.Best Matched Pair
题目链接 #include<cstdio> #include<cstring> #include<algorithm> #include<stack> ...
- 2016弱校联盟十一专场10.5---As Easy As Possible(倍增)
题目链接 https://acm.bnu.edu.cn/v3/contest_show.php?cid=8506#problem/A problem description As we know, t ...
随机推荐
- html中a标签做容器的问题
今天试验了一下a标签当作容器的问题,若a包含的容器中没有a标签的话,a标签是可以被当作成容器使用的,在谷歌浏览器这种浏览器中是可行的,但是在低版本的IE中会有bug出现,就是浏览器在解析的时候会把a标 ...
- Linux关闭休眠和屏保模式
本人因为特殊需求,想让某台Linux主机始终显示某个程序,显示器不能关机或者休眠或进入屏保模式. 环境:Ubuntu 11.10 最小化模式安装并安装有轻量级桌面openbox(非gnome).因为X ...
- redis发布订阅
命令 : redis-cli打开一个客户端 Redis Psubscribe 命令订阅一个或多个符合给定模式的频道. 每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.n ...
- bzoj1855: [Scoi2010]股票交易--单调队列优化DP
单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...
- 条件查询,有input和select框,当查询条件获取焦点时支持摁下enter键查询
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色
1.gridview 双击GridView的OnRowDataBound事件: 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示: protected void ...
- Ubuntu Linux上安装配置Mysql
一.安装: 三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt ...
- Color Space: Ycc
在进行图像扫描时,有一种重要的扫描输入设备PhotoCd,由于PhotoCd在存储图像的时候要经过一种模式压缩,所以PhotoCd采用了Ycc颜色空间,此空间将亮度作由它的主要组件,具有两个单独的颜色 ...
- Nginx下TIME_WAIT过多的调优
查看Nginx并发状态 #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 1259SYN_ ...
- thinkphp3.2 cli模式的正确使用方法
最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...