题意:http://codeforces.com/gym/102394/problem/E

1操作是给你一串数,2操作是连结两个串(所以可能很长),问你最后一个串的值(知道最多的个数就很好算,关键计算个数)

思路:

对二操作建图,一开始还以为建出来的是树就可以直接BFS计算次数,自闭了好久,最后才发现是拓扑图,一点点扒点才行。

离散化加统计个数啥的导致代码冗长,奇奇怪怪的数组贼多。

 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>//freopen("C:\\Users\\13606\\Desktop\\Input.txt","r",stdin);
#include <bitset>
//#include <map>
#include<unordered_map>
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr
#include <string>
#include <time.h>// srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
#include <cassert>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
//******************
int abss(int a);
int lowbit(int n);
int Del_bit_1(int n);
int maxx(int a,int b);
int minn(int a,int b);
double fabss(double a);
void swapp(int &a,int &b);
clock_t __STRAT,__END;
double __TOTALTIME;
void _MS(){__STRAT=clock();}
void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
//***********************
#define rint register int
#define fo(a,b,c) for(rint a=b;a<=c;++a)
#define fr(a,b,c) for(rint a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef long long ll;
const double E=2.718281828;
const double PI=acos(-1.0);
const ll INF=(1LL<<);
const int inf=(<<);
const double ESP=1e-;
const int mod=(int)1e9+;
const int N=(int)1e6+; int a[N],b[N],in[N];
ll much[N];
ll mark[N];
void LS(int n)
{
int m=;
for(int i=;i<=n;++i)
b[++m]=a[i];
sort(b+,b++m);
m=unique(b+,b++m)-b-;
for(int i=;i<=n;++i)
a[i]=lower_bound(b+,b++m,a[i])-b;
return;
}
vector<vector<int> >arr(N);
struct node
{
int to,next;
ll val;
}edge[N*];
int head[N];
ll val[N];
bool is[N];
int tot;
void Init(int n)
{
tot=;
for(int i=;i<=n;++i)
val[i]=in[i]=head[i]=is[i]=;
}
void add(int from,int to)
{
++tot;
edge[tot].to=to;
// edge[tot].val=val;
edge[tot].next=head[from];
head[from]=tot;
} queue<int>q;
void bfs(int start)
{
q.push(start);
while(!q.empty())
{
int now=q.front();q.pop();
is[now]=;
for(int i=head[now];i!=;i=edge[i].next)
{
int to=edge[i].to;
in[to]++;
if(!is[to])
{
is[to]=;
q.push(to);
}
}
}
}
void topu(int x)
{
q.push(x);
val[x]=;
while(!q.empty())
{
int now=q.front();q.pop();
for(int i=head[now];i!=;i=edge[i].next)
{
int to=edge[i].to;
in[to]--;
val[to]+=val[now];
if(in[to]==)
q.push(to);
}
}
} void solve()
{
int n;
sc("%d",&n);
Init(n);
for(int i=;i<=n;++i)
{
int J;
sc("%d",&J);
if(J==)
{
int num;
sc("%d",&num);
for(int j=;j<=num;++j)
{
int t;
sc("%d",&t);
arr[i].push_back(t);
}
}
else
{
int u,v;
sc("%d%d",&u,&v);
add(i,u),add(i,v);
}
}
bfs(n);
topu(n);
int num=;
for(int i=;i<=n;++i)
{
if(is[i])
{
int sz=arr[i].size();
for(int j=;j<sz;++j)
a[++num]=arr[i][j],much[num]=val[i];
}
}
LS(num);
for(int i=;i<=num;++i)
mark[i]=;
for(int i=;i<=num;++i)
mark[a[i]]+=much[i];
ll max_=,sum=;
for(int i=;i<=num;++i)
max_=max(max_,mark[i]),sum+=mark[i];
ll ans=;
if(max_>sum-max_)
ans=*(sum-max_);
else
ans=sum;
pr("%lld\n",ans);
for(int i=;i<=n;++i)
arr[i].clear();
} int main()
{
int T;
sc("%d",&T);
while(T--)solve();
return ;
} /**************************************************************************************/ int maxx(int a,int b)
{
return a>b?a:b;
} void swapp(int &a,int &b)
{
a^=b^=a^=b;
} int lowbit(int n)
{
return n&(-n);
} int Del_bit_1(int n)
{
return n&(n-);
} int abss(int a)
{
return a>?a:-a;
} double fabss(double a)
{
return a>?a:-a;
} int minn(int a,int b)
{
return a<b?a:b;
}

Exchanging Gifts--2019CCPC哈尔滨 E题的更多相关文章

  1. 2017 ccpc哈尔滨 A题 Palindrome

    2017 ccpc哈尔滨 A题 Palindrome 题意: 给一个串\(T\),计算存在多少子串S满足\(S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)\) 思路: 很明显这里的回文串长 ...

  2. 2019ccpc哈尔滨打铜记

    小学生日记: 2019.10.13,哈尔滨,打了个铜 开头 先说结论,这次失败,我的锅70%,sdl的锅5%,ykh25% Day0 周五, 我们队出现了奇怪的厄运上身 首先是我中途在飞机上数据线突然 ...

  3. 2019CCPC秦皇岛 E题 Escape(网络流)

    Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  4. 2019CCPC秦皇岛D题 Decimal

    Decimal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  5. 2019CCPC秦皇岛I题 Invoker(DP)

    Invoker Time Limit: 15000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  6. CCPC哈尔滨E题

    一堆序列拼接起来,找出现次数大于n/2的数 假设一个数出现次数大于n/2 那么它减去其他数出现的次数一定非负: = c) { cnt += t[i]; } } } } //cout<<c& ...

  7. 模拟赛小结:The 2019 China Collegiate Programming Contest Harbin Site

    比赛链接:传送门 上半场5题,下半场疯狂挂机,然后又是差一题金,万年银首也太难受了. (每次银首都会想起前队友的灵魂拷问:你们队练习的时候进金区的次数多不多啊?) Problem J. Justify ...

  8. A - Presents

    Problem description Little Petya very much likes gifts. Recently he has received a new laptop as a N ...

  9. The 2019 China Collegiate Programming Contest Harbin Site

    题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...

随机推荐

  1. idea导入项目之后包位置报错

    解决办法:

  2. Echarts案例-柱状图

    一:先在官网下载 https://www.echartsjs.com/zh/download.html 然后再建立工程,导入这两个包: 写代码: <!DOCTYPE html> <h ...

  3. vue单页面项目架构方案

    这里的架构方案是基于vue-cli2生成的项目应用程序产生的,是对项目应用程序或者项目模板的一些方便开发和维护的封装.针对单页面的解决方案. 主要有四个方面: 一,不同环境下的分别打包 主要是测试环境 ...

  4. kotlin标准委托之可观察属性

    所谓可观察属性就是当属性变化时可以拦截其变化,实现观察属性值变化的委托函数是Delegates.observable.该函数接受二个参数,第一个是初始化值,第2个属性值变化事件的响应器.每次我们向属性 ...

  5. 强悍的Python读取大文件的解决方案

    这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...

  6. GPS模块编程之NMEA0183协议

    NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.现在已经成为GPS导航设备统一的RTCM(Rad ...

  7. 图解 HTTP 笔记(三)—— HTTP 报文内的 HTTP 信息

    本章主要讲解请求和响应是如何运作的 一.HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文,客户端的 HTTP 报文叫做请求报文,服务器端的叫做响应报文. HTTP 报文大致可分为报 ...

  8. ubuntu安装ubuntu-kylin-software-center

    sudo apt-get updatesudo apt-get upgradesudo apt-get install --reinstall ubuntu-kylin-software-center ...

  9. Flutter打包release版本安卓apk包真机安装无法请求网络的解决方法

    今天flutter build apk打包了一个release.apk包,在真机上安装后网络数据都不显示,但是在模拟器上没问题,然后又连接真机开debug各种测试,一切都正常!那这会是什么问题呢? 查 ...

  10. 使用微软的WinAppDriver进行Windows客户端自动化测试

    一.WinAppDriver简介: 参见:https://github.com/microsoft/WinAppDriver Windows Application Driver(WinAppDriv ...