Father Christmas flymouse
Father Christmas flymouse
Description After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ends such as cleaning out the computer lab for training as extension of his contribution to the team. When Christmas came, flymouse played Father Christmas to give gifts to the team members. The team members lived in distinct rooms in different buildings on the campus. To save vigor, flymouse decided to choose only one of those rooms as the place to start his journey and follow directed paths to visit one room after another and give out gifts en passant until he could reach no more unvisited rooms. During the days on the team, flymouse left different impressions on his teammates at the time. Some of them, like LiZhiXu, with whom flymouse shared a lot of candies, would surely sing flymouse’s deeds of generosity, while the others, like snoopy, would never let flymouse off for his idleness. flymouse was able to use some kind of comfort index to quantitize whether better or worse he would feel after hearing the words from the gift recipients (positive for better and negative for worse). When arriving at a room, he chould choose to enter and give out a gift and hear the words from the recipient, or bypass the room in silence. He could arrive at a room more than once but never enter it a second time. He wanted to maximize the the sum of comfort indices accumulated along his journey. Input The input contains several test cases. Each test cases start with two integers N and M not exceeding 30 000 and 150 000 respectively on the first line, meaning that there were N team members living in N distinct rooms and M direct paths. On the next N lines there are N integers, one on each line, the i-th of which gives the comfort index of the words of the team member in the i-th room. Then follow M lines, each containing two integers i and j indicating a directed path from the i-th room to the j-th one. Process to end of file. Output For each test case, output one line with only the maximized sum of accumulated comfort indices. Sample Input 2 2 Sample Output 35 Hint 32-bit signed integer type is capable of doing all arithmetic. Source POJ Monthly--2006.12.31, Semp
|
【思路】
最大点权值路径 tarjian缩点+spfa
缩点的权值只记录正的值。
【code】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define ME 150005
#define NM 500009
vector<int>vec[NM];
int n,m,val[NM],head[NM],dfn[NM],low[NM],u,v;
int col[NM],belong[NM],sumcol,ans,in[NM],out[NM];
int sumedge,stack[NM],instack[NM],dis[NM],inq[NM];
int tim,top;
struct Edge {
int x,y,nxt;
Edge(int x=,int y=,int nxt=):
x(x),y(y),nxt(nxt) {}
} edge[ME];
void add(int x,int y)
{
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
}
void fir()
{
memset(head,,sizeof(head));
memset(stack,,sizeof(stack));
memset(instack,,sizeof(instack));
memset(dis,,sizeof(dis));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(out,,sizeof(out));
memset(in,,sizeof(in));
memset(inq,,sizeof(inq));
for(int i=; i<n; i++)
vec[i].clear();
top=;
sumedge=;
sumcol=;
tim=;
}
void tarjian(int x)
{
dfn[x]=low[x]=++tim;
stack[top++]=x;
instack[x]=;
for(int i=head[x]; i; i=edge[i].nxt)
if(instack[edge[i].y])
low[x]=min(low[x],dfn[edge[i].y]);
else if(!dfn[edge[i].y]) {
tarjian(edge[i].y);
low[x]=min(low[x],low[edge[i].y]);
} else {
}
if(low[x]==dfn[x]) {
sumcol++;
while(stack[top-]!=x) {
col[stack[top-]]=sumcol;
instack[stack[top-]]=false;
top--;
}
stack[top]=sumcol;
top--;
}
}
void spfa()
{
queue<int>q;
q.push();
inq[]=;
while(!q.empty()) {
int now=q.front();
q.pop();
inq[now]=;
for(int i=vec[now].size()-; i>=; i--) {
int to=vec[now][i];
if(dis[to]<dis[now]+belong[to]) {
dis[to]=dis[now]+belong[to];
if(!inq[to]) {
inq[to]=;
q.push(to);
} }
}
}
}
int main()
{
while(scanf("%d %d",&n,&m)) {
fir();
for(int i=; i<n; i++)
{
scanf("%d",&val[i]);
val[i]=max(val[i],);
} for(int i=; i<=m; i++)
{
scanf("%d %d",&u,&v);
add(u,v);
}
for(int i=; i<n; i++)
if(!dfn[i])tarjian(i);
for(int i=;i<n;i++)cout<<col[i]<<endl;
for(int i=; i<n; i++)
belong[col[i]]+=val[i];
for(int i=; i<n; i++) {
for(int j=head[i]; j; j=edge[j].nxt) {
if(col[i]==col[edge[j].y])continue;
vec[col[i]].push_back(col[edge[i].y]);
out[col[i]]++;
in[col[edge[i].y]]++;
}
}
for(int i=;i<=sumcol;i++)
if(!in[i])vec[].push_back(i);
spfa();
for(int i=; i<=sumcol; i++) {
if(!out[i])ans=max(ans,dis[i]);
}
printf("%d\n",ans);
}
return ;
}
Father Christmas flymouse的更多相关文章
- POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3241 Accep ...
- POJ 3126 --Father Christmas flymouse【scc缩点构图 && SPFA求最长路】
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3007 Accep ...
- L - Father Christmas flymouse
来源poj3160 After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ...
- poj 3160 Father Christmas flymouse
// 题目描述:从武汉大学ACM集训队退役后,flymouse 做起了志愿者,帮助集训队做一些琐碎的事情,比如打扫集训用的机房等等.当圣诞节来临时,flymouse打扮成圣诞老人给集训队员发放礼物.集 ...
- poj 3160 Father Christmas flymouse【强连通 DAG spfa 】
和上一道题一样,可以用DAG上的动态规划来做,也可以建立一个源点,用spfa来做 #include<cstdio> #include<cstring> #include< ...
- POJ——T3160 Father Christmas flymouse
Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3496 Accepted: 1191 缩点,然后每个新点跑一边SPFA ...
- Father Christmas flymouse--POJ3160Tarjan
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...
- POJ:3160-Father Christmas flymouse
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...
- 【转】Tarjan&LCA题集
转自:http://blog.csdn.net/shahdza/article/details/7779356 [HDU][强连通]:1269 迷宫城堡 判断是否是一个强连通★2767Proving ...
随机推荐
- zabbix-agent active 配置自动探测
1. zabbix-agent 被动模式配置文件: PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_a ...
- Java Enum的使用
最近为了便于对状态码的描述信息进行解析,学习了一下Enum的使用,发现还挺好使的. 首先,定义一个Enum的类Status,有两个属性statusValue状态码 以及 statusDesc状态描述 ...
- 字符串查找strpos()函数用法
#如果id=3 在字符串中查找出3是否存在.$str="2,12,33,22,55"; if(strpos(','.$id.',',','.$str.',')!==FALSE){ ...
- WPF converter(包含传递复杂参数)
单值转换器 将单一值转换为特定类型的值,以日期转换为例如下: 1.定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert. 1 public class DateC ...
- 解析域名得到IP
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=142713&page=e&#a 分享类型:游戏开发相关 #include &l ...
- python 基础 9.3 mysql 数据操作
#/usr/bin/python #coding=utf-8 #@Time :2017/11/21 0:20 #@Auther :liuzhenchuan #@File :mysql 数据操作 ...
- EasyPlayerPro(Windows)流媒体播放器开发之ffmpeg log输出报错
EasyPlayerPro主要基于ffmpeg进行开发,在EasyPlayerPro开发过程中,曾遇到一个相对比较棘手的问题,该问题一般在播放不是很标准的流或者网络情况较差,容易出现丢帧的情况特别容易 ...
- 九度OJ 1163:素数 (素数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8496 解决:2887 题目描述: 输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数 ...
- 题解 P3805 【【模板】manacher算法】
题解 P3805 [[模板]manacher算法] 我们先看两个字符串: ABCCBA ABCDCBA 显然这两字符串是回文的 然而两个串的对称中心的特性不同,第一个串,它的对称中心在两个C中间,然而 ...
- 我的Android进阶之旅------>使用ThumbnailUtils类获取视频的缩略图
今天看了一段代码,是关于获取视频的缩略图的,让我认识了一个ThumbnailUtils类,代码如下. Bitmap bitmap = ThumbnailUtils.createVideoThumbna ...