题目链接:https://vjudge.net/contest/154238#overview

  ABCDE都是水题。

  F题,一开始分类讨论,结果似乎写挫了,WA了一发。果断换并查集上,A了。

  G题,状态压缩DP,不难写,但是时限有点紧,读入也比较恶心。。值得注意的是计算一个数二进制下有几个1可以用__builtin_popcount(mask);判断a和b在二进制表示下a是不是b的子集可以用(a&b)==a;另外字符串s想移除最后一位可以s.resize(s.size()-1)或者s.erase(s.end()-1)。

  H题,tarjan题,思路不难。无向图缩点以后找一下树的直径,再遍历一下即可。但是被两个傻逼错误卡了好久。。好弱啊。。顺便注意下,无向图的缩点需要在tarjan的时候加一个参数fa,或者用head数组实现邻接表。后者因为反向边和原边的编号是相邻的,可以直接用vis数组来使得反向边不访问,这个方法的好处是可以处理重边,而第一个方法不行。具体的代码实现我之前的模板里有。。贴一下这题的代码好了:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <stack>
using namespace std;
const int inf = 0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
const int N = + ; int n,m,dfs_clock,dfn[N],low[N];
int belong[N],scc_cnt,id[N];
stack<int> S;
struct edge
{
int v,w,nxt;
}G[N*];
int head[N],head2[N],etot;
vector<int> bcc[N];
void addEdge(int u,int v,int w,int* head)
{
G[etot] = (edge){v,w,head[u]};
head[u] = etot++;
} int pos = ;
void init()
{
etot = ;
memset(head,-,sizeof head);
memset(head2,-,sizeof head2);
dfs_clock = ;
memset(dfn,,sizeof(dfn));
memset(belong,,sizeof(belong));
scc_cnt = ;
memset(id,-,sizeof(id));
} void tarjan(int u,int fa)
{
dfn[u]=low[u]=++dfs_clock;
S.push(u);
for(int i=head[u];i!=-;i=G[i].nxt)
{
edge e = G[i];
int v = e.v;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
}
else if(dfn[v] < dfn[u] && v != fa)
{
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u])
{
scc_cnt++;
bcc[scc_cnt].clear();
for(;;)
{
int x = S.top();S.pop();
belong[x] = scc_cnt;
bcc[scc_cnt].push_back(x);
if(id[scc_cnt] == - || id[scc_cnt] > x) id[scc_cnt] = x;
if(x==u) break;
}
} } ll d[N],d1[N],d2[N];
void dfs(int u,int fa,ll* dis)
{
for(int i=head2[u];i!=-;i=G[i].nxt)
{
edge e = G[i];
int v = e.v, w = e.w;
if(v == fa) continue;
dis[v] = dis[u] + w;
dfs(v,u,dis);
}
} void solve()
{
for(int i=;i<=n;i++)
{
if(!dfn[i]) tarjan(i,-);
} for(int i=;i<=n;i++)
{
int u = belong[i];
for(int j=head[i];j!=-;j=G[j].nxt)
{
edge e = G[j];
int v = belong[e.v], w = e.w;
if(u != v)
{
addEdge(u,v,w,head2);
}
}
} int x = belong[];
d[x] = ;
dfs(x,-,d);
int y = x;
for(int i=;i<=scc_cnt;i++)
{
if(d[i] > d[y])
{
y = i;
}
}
d1[y] = ;
dfs(y,-,d1);
x = y;
for(int i=;i<=scc_cnt;i++)
{
if(d1[i] > d1[x])
{
x = i;
}
}
d2[x] = ;
dfs(x,-,d2);
int ans_id = min(id[x],id[y]);
ll len = d1[belong[ans_id]] + d2[belong[ans_id]];
for(int i=;i<=scc_cnt;i++)
{
ll temp = max(d1[i], d2[i]);
if(temp < len)
{
ans_id = id[i];
len = temp;
}
else if(temp == len && id[i] < ans_id) ans_id = id[i];
}
printf("%d %I64d\n",ans_id,len);
} int main()
{
int T;
scanf("%d",&T);
for(int kase=;kase<=T;kase++)
{
init();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addEdge(u,v,w,head);
addEdge(v,u,w,head);
}
solve();
}
}

H题

2015 ACM Arabella Collegiate Programming Contest的更多相关文章

  1. gym100676 [小熊骑士限定]2015 ACM Arabella Collegiate Programming Contest

    Kuma Rider久违的第二场训练,这场很水,又在vj的榜单上看到第一场的大哥了,2小时ak,大哥牛啤! A.水 #include<cstdio> #include<iostrea ...

  2. 边双连通缩点+树dp 2015 ACM Arabella Collegiate Programming Contest的Gym - 100676H

    http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送 ...

  3. Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest(二月十日训练赛)

    A(By talker): 题意分析:以a(int) op b(int)形式给出两个整数和操作符, 求两个整数是否存在操作符所给定的关系 ,有则输出true,无则输出false: 思路:由于无时间复杂 ...

  4. 18春季训练01-3/11 2015 ACM Amman Collegiate Programming Contest

    Solved A Gym 100712A Who Is The Winner Solved B Gym 100712B Rock-Paper-Scissors Solved C Gym 100712C ...

  5. ACM Arabella Collegiate Programming Contest 2015 F. Palindrome 并查集

    题目链接:http://codeforces.com/gym/100676/attachments 题意: 给一个字符串,有一些约束条件,两个位置要相同,有一些是问号,求最后有多少种方案回文? 分析: ...

  6. ACM Arabella Collegiate Programming Contest 2015 H. Capital City 边连通分量

    题目链接:http://codeforces.com/gym/100676/attachments 题意: 有 n 个点,m 条边,图中,边强连通分量之间可以直达,即距离为 0 ,找一个点当做首都,其 ...

  7. 2017 ACM Arabella Collegiate Programming Contest(solved 11/13)

    省选考前单挑做点ACM练练细节还是很不错的嘛- 福利:http://codeforces.com/gym/101350 先来放上惨不忍睹的virtual participate成绩(中间跑去食堂吃饭于 ...

  8. 带权并查集:CF-2015 ACM Arabella Collegiate Programming Contest(F题)

    F. Palindrome Problem Description A string is palindrome if it can be read the same way in either di ...

  9. 2015 ACM Syrian Collegiate Programming Contest

    A. My Friend of Misery 计算出答案的上下界即可. 时间复杂度$O(n)$. #include<bits/stdc++.h> using namespace std; ...

随机推荐

  1. 再谈.NET委托(delegate、Func<>)

    为了演示委托,我们先来定义一个方法:public static bool IsTen(int i){    return i == 10 ? true : false;} 如果要用自定义委托,则需要声 ...

  2. Java Web-Filter and listener

    Java Web-Filter and listener Filter:过滤器 概述 拦截请求,完成一些特殊的功能. 过滤器的作用: 一般用于完成通用的一些操作,例如登录验证(通过session来判断 ...

  3. class类 - extends

    继承是面向对象中一个比较核心的概念.ES6 class的继承与java的继承大同小异,如果学过java的小伙伴应该很容易理解,都是通过extends关键字继承.相较于ES5当中通过原型链继承要清晰和方 ...

  4. 面试题之String s="a"+"b"+"c"+"d";

    今天遇到了一个面试题的选择,我当时真的没怎么在意,其实挺好玩的. 1.这条语句String s="a"+"b"+"c"+"d&qu ...

  5. MVC框架+vue+elementUI

    用自动化构建做的vue项目,因为是动态加载数据,在SEO优化时一直不如意,于是我们换了框架,用MVC框架,做成静态页面,但是原来的代码都是用vue和elementUI,为了快速的复用原来的代码,于是在 ...

  6. Linux服务器centos7系统下搭建Jenkins

    Jenkins是什么? Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建.部署.自动化, 满足任何项目的需要. 所以现在是越来越多的公司都在使用Jenkins做持续 ...

  7. CAD二次开发之入门坑

    如果没有引用第一个dll,则会报未找到引用CommandMethod

  8. 如何在Web应用里消费SAP Leonardo的机器学习API

    去年5月的时候,Jerry曾经写了一篇文章:使用Java程序消费SAP Leonardo的机器学习API,而最近另外做的一个项目,需要在Web应用里做同样的事情. 因为有了前一篇文章的铺垫,避免了很多 ...

  9. Oracle查看表之间的约束

    ----查看表约束 表格: user_constraints 查询外键约束条件 select ' select count(*) from '||TABLE_NAME||';'from user_co ...

  10. MySQL中SQL语句常见优化策略

    1.避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值 应尽量避免在where 子句中对字段进行null 值判 ...