div3
要想值最大:
只要能配成对,值就会增加 ans+(配对值)
1.找到第一个为负数的位置和最后一个为负数的位置,中间的正数的段数必定小于该范围内负数的段数 负数段是由正数段隔开的
2.计算所有的负数的段数,直接翻转就是答案 最后的负数段数记得算上
即遇到正数 如果前面有负数ans++ flag=false
很简单 先求他在第几层,之后循环加上父节点的值即可
*不管他是偶数还是奇数 直接除2就是对应的父节点值
就是拓扑排序(邻接表建图) 要求从一个结点能走到多少个叶子节点上
1.怎样防止无向图在判断邻接点时重复将已经剔除的点再加进来:
开数组st[N],将pop出去的数据赋值为true,在判断i=h[tmp]时如果st=true直接continue
由于边的信息并不是按照开始和结束给出的 所以必须用无向图建图 即边*2
2.对于顶点特殊处理
在进队时就从2开始 判断d[i]是否为1(无向图建图,终点和起点不知 均++ 如果是叶子节点则d[i]==1 除了根节点外)
牛客暑期多校
Alive Fossils
vector<string,int> ss;
for(auto iter=mp.begin();iter!=mp.end();iter++){
if(iter->second==p){
cnt++;
ss.push_back(iter->first);
}
}
cout<<cnt<<endl;
for(int i=0;i<cnt;i++) cout<<ss[i]<<endl;