展翅翱翔之时 (はばたきのとき)
来源:互联网 发布:airplay软件下载 编辑:程序博客网 时间:2024/05/08 17:01
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int A[MAXN];
long long C[MAXN];
int b[MAXN];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> A[i] >> C[i];
A[i]--;
}
for (int i = 0; i < n; i++) {
b[i] = -1;
}
bool F = 0;
for (int i = 0; i < n; i++) {
if (b[i] != -1) {
continue;
}
int j = i;
while (b[j] == -1) {
b[j] = i;
j = A[j];
}
if (b[j] == i) {
int C = 0;
while (b[j] != -2) {
b[j] = -2;
j = A[j];
C++;
}
if (C == n) {
F = 1;
}
}
}
long long ans = 0ll;
if (!F) {
for (int i = 0; i < n; i++) {
ans += C[i];
}
static long long M1[MAXN] = {0}, M2[MAXN] = {0};
for (int i = 0; i < n; i++) {
M1[A[i]] = max(M1[A[i]], C[i]);
if (b[i] != -2) {
M2[A[i]] = max(M2[A[i]], C[i]);
}
}
for (int i = 0; i < n; i++) {
ans -= M1[i];
}
for (int i = 0; i < n; i++) {
if (b[i] != -2) {
continue;
}
long long M = 10000000000ll;
int j = i;
while (b[j] == -2) {
M = min(M, M1[j] - M2[j]);
b[j] = -3;
j = A[j];
}
ans += M;
}
}
cout << ans << endl;
return 0;
}
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int A[MAXN];
long long C[MAXN];
int b[MAXN];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> A[i] >> C[i];
A[i]--;
}
for (int i = 0; i < n; i++) {
b[i] = -1;
}
bool F = 0;
for (int i = 0; i < n; i++) {
if (b[i] != -1) {
continue;
}
int j = i;
while (b[j] == -1) {
b[j] = i;
j = A[j];
}
if (b[j] == i) {
int C = 0;
while (b[j] != -2) {
b[j] = -2;
j = A[j];
C++;
}
if (C == n) {
F = 1;
}
}
}
long long ans = 0ll;
if (!F) {
for (int i = 0; i < n; i++) {
ans += C[i];
}
static long long M1[MAXN] = {0}, M2[MAXN] = {0};
for (int i = 0; i < n; i++) {
M1[A[i]] = max(M1[A[i]], C[i]);
if (b[i] != -2) {
M2[A[i]] = max(M2[A[i]], C[i]);
}
}
for (int i = 0; i < n; i++) {
ans -= M1[i];
}
for (int i = 0; i < n; i++) {
if (b[i] != -2) {
continue;
}
long long M = 10000000000ll;
int j = i;
while (b[j] == -2) {
M = min(M, M1[j] - M2[j]);
b[j] = -3;
j = A[j];
}
ans += M;
}
}
cout << ans << endl;
return 0;
}
0 0
- 展翅翱翔之时 (はばたきのとき)
- 做一只展翅翱翔的雄鹰
- 华尔街风雨飘摇 甲骨文却展翅翱翔
- "IT小小鸟"VS."小小小鸟":展翅,我们一起翱翔
- MATLAB制作GIF之大鹏展翅
- opengles之展翅飞翔的雄鹰
- 敢于翱翔,才能翱翔
- 勇于翱翔,才能翱翔
- 分享 翱翔
- 三十五、凤凰展翅 再创辉煌
- 小鹰展翅_虚函数
- 放飞心情去翱翔
- 空中的翱翔
- 翱翔怎么了
- 翱翔天际的感觉
- 翱翔GitHub的海洋
- 凤翱翔于千仞
- 翱翔在计算机系统 DMA(1)
- leetcode160~Intersection of Two Linked Lists
- 学习淘淘商城第八课(SSM框架整合之Dao层整合)
- 2017本科组模拟赛(计算生日)
- hibernate 使用实体 和附加类 作为属性
- 从map中取值的正确方法
- 展翅翱翔之时 (はばたきのとき)
- IDEA中多行注释及取消注释快捷键
- 【转】Python 包管理工具解惑【原文:http://zengrong.net/post/2169.htm】
- Android实用功能分享——应用版本的更新实例
- Java操作数据库的步骤
- iOS的内存管理
- 页面返回历史上一页并且刷新
- JAVA多线程之——线程之间的通信
- uva532