题目链接: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 core下对于Excel的一些操作及使用

    原文:.net core下对于Excel的一些操作及使用 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.cs ...

  2. MiniUI学习笔记一【转】

    MiniUI Api文档:http://miniui.com/docs/api/index.html 1.取组件值 传递form data,load发送 请求加载数据 <script type= ...

  3. 同步/异步/阻塞/非阻塞/BIO/NIO/AIO

    转摘自:https://www.cnblogs.com/lixinjie/p/a-post-about-io-clearly.html 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HT ...

  4. mac OS下 安装MySQL 5.7

    Mac OS X 下 TAR.GZ 方式安装 MySQL 5.7 与 MySQL 5.6 相比, 5.7 版本在安装时有两处不同: 1:初始化方式改变, 从scripts/mysql_install_ ...

  5. controller 层 date 类型的参数,SpringBoot自动转换 dateformat

    这样客户端提交的String 就可以自动转换为Date了!!!

  6. (详细)JAVA使用JDBC连接MySQL数据库(3)-代码部分

    欢迎任何形式的转载,但请务必注明出处. 本节主要内容 项目建立 数据库连接 数据库操作 主函数 点击进入推荐博客(必看) 一.项目建立 如图所示:新建Java Project.Package.Clas ...

  7. Tomcat应用访问SSL或https失败的解决办法

    一,首先,解决unable to find valid certification path to requested target的问题. 其实就是要生成证书, 让tomcat读取证书 import ...

  8. tr 命令详细介绍

    tr用来从标准输入中对字符进行操作,主要用于删除文件中指定字符.字符转换.压缩文件字符. 我们可以用:tr --help查看一下系统详细介绍 [root@bqh-118 scripts]# tr -- ...

  9. C 全局变量 本地变量

  10. vSphere

    VMware vSphere集成容器(VIC)建立了一个在轻量级虚拟机内部署并管理容器的环境.全新的虚拟机环境提供了更高级别的硬件隔离度,灵活性以及可扩展性使得容器对开发人员以及企业应用具有如此大的吸 ...