ACM-ICPC实验室20.2.19测试-图论
B.Harborfan的新年拜访Ⅱ
就是一道tarjan缩点的裸题。
建图比较麻烦
以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
vector<int> g[maxn];
string s1,s2;
int N,M;
int low[maxn];
int dfn[maxn];
int pos[maxn];
stack<int> st;
int scc;
int cnt;
void tarjan (int x) {
low[x]=dfn[x]=++cnt;
st.push(x);
for (int i=;i<g[x].size();i++) {
if (!low[g[x][i]]) {
tarjan(g[x][i]);
low[x]=min(low[x],low[g[x][i]]);
}
else if (!pos[g[x][i]])low[x]=min(low[x],dfn[g[x][i]]);
}
if (low[x]==dfn[x]) {
scc++;
while () {
int u=st.top();
st.pop();
low[u]=low[x];
pos[u]=scc;
if (u==x) break;
}
}
}
int main () {
scanf ("%d %d",&N,&M);
cin>>s1>>s2;
/*for (int i=2;i<=6;i++) g[i].push_back(i-1);
for (int i=8;i<=12;i++) g[i-1].push_back(i);
for (int i=14;i<=18;i++) g[i].push_back(i-1);
for (int i=20;i<=24;i++) g[i-1].push_back(i);
for (int i=7;i<=19;i+=6) g[i-6].push_back(i);
for (int i=8;i<=20;i+=6) g[i].push_back(i-6);
for (int i=9;i<=21;i+=6) g[i-6].push_back(i);
for (int i=10;i<=22;i+=6) g[i].push_back(i-6);
for (int i=11;i<=23;i+=6) g[i-6].push_back(i);
for (int i=12;i<=24;i+=6) g[i].push_back(i-6); */
for (int i=;i<s1.length();i++) {
for (int j=i*M+;j<=(i+)*M;j++) {
if (s1[i]=='>') g[j-].push_back(j);
else g[j].push_back(j-);
}
}
for (int i=;i<s2.length();i++) {
for (int j=M+i+;j<=M*(N-)++i;j+=M) {
if (s2[i]=='v') g[j-M].push_back(j);
else g[j].push_back(j-M);
}
}
for (int i=;i<=N*M;i++) if (!low[i]) tarjan(i);
//printf ("%d\n",scc);
if (scc==) printf ("YES");
else printf ("NO");
return ;
}
E.
爆搜即可,需要注意的是,一个单位代表四面墙,每一次爆搜,把搜到的点记录下来,之后询问就直接输出答案,避免tle~
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
string s[maxn];
int g[maxn][maxn];
int N,M,K;
struct node {
int x,y;
};
int X[]={,,-,};
int Y[]={,,,-};
int visit[maxn][maxn];
int visit1[maxn][maxn][];
int q1[maxn][maxn];
int judge (int x,int y) {
if (x<||x>N||y<||y>M) return ;
return ;
}
int bfs (int x,int y,int z) {
queue<node> q;
q.push({x,y});
memset(visit,,sizeof(visit));
memset(visit1,,sizeof(visit1));
visit[x][y]=;
int ans=;
q1[x][y]=z;
while (!q.empty()) {
node u=q.front();
q.pop();
for (int i=;i<;i++) {
int tx=u.x+X[i];
int ty=u.y+Y[i];
if (!judge(tx,ty)) continue;
if (visit[tx][ty]) continue;
if (visit1[tx][ty][i]) continue;
if (g[tx][ty]==) {
q.push({tx,ty});
visit[tx][ty]=;
q1[tx][ty]=z;
continue;
}
if (g[tx][ty]==) {
ans++;
visit1[tx][ty][i]=;
}
}
}
return ans;
}
int ans[maxn*];
int main () {
scanf ("%d %d %d",&N,&M,&K);
for (int i=;i<=N;i++) cin>>s[i];
for (int i=;i<=N;i++) {
for (int j=;j<s[i].length();j++) {
g[i][j+]=s[i][j]=='.'?:;
}
}
int x,y;
for (int i=;i<K;i++) {
scanf ("%d %d",&x,&y);
if (q1[x][y]) {
printf ("%d\n",ans[q1[x][y]]);
continue;
}
ans[i+]=bfs(x,y,i+);
printf ("%d\n",ans[i+]);
}
return ;
}
ACM-ICPC实验室20.2.19测试-图论的更多相关文章
- ACM-ICPC实验室20.2.21测试-图论(二)
A.患者的编号 给出一个有向图,要求你输出字典序最小的拓扑排序. 常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~ #include< ...
- 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)D 不定方程
题目链接:https://ac.nowcoder.com/acm/contest/2720/D 题意:对于 ax = by = c ,给出 x, y 求符合条件的 a, b, c 且 c 为最小的解, ...
- ACM-ICPC实验室20.2.22测试-动态规划
C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...
- hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- Java in ACM/ICPC
目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...
随机推荐
- dev、test、pre和prod是什么意思?
开发环境(dev):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告. 测试环境(test):一般是克隆一份生产环境的配置,一个程序在测试环境工 ...
- Codeforces 524C.The Art of Dealing with ATM(暴力)
我先采用了智障解法(n * n枚举...刚开始把n看成1000了还以为能过) 理所当然的t了,不过我怀疑优化一下能过?(感觉数据不太行的亚子 然后就是O(n * k * k)的解法,看到好多人快乐二分 ...
- docker-部署zabbix4
一.安装docker环境 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 设置yum源 yum-config-mana ...
- 用户注册(php)login(非美化)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- C++ 深拷贝实例-改变原生数组
深拷贝 main.cpp #include <stdio.h> #include "IntArray.h" int main() { IntArray a(); ; i ...
- UIAutomation踩坑
最近有这样一个需要,在一个AppDomain中通过UIAutomation做一些操作,并在操作完成后卸载掉这个AppDomain.然而在卸载这个AppDomain时,总会出现System.Cannot ...
- umi ui 构建时出现 spawn sh ENOENT 报错的解决方法
在使用umi可视化界面构建项目的时候,如果出现spawn sh ENOENT错误,一般都是由于环境变量里没有设置git的环境变量导致的.在环境变量的path里加上"C:\Program Fi ...
- SQL Server经典sql语句大全(转)
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- spring自动装配和通过java实现装配
1.组建扫描 在类上添加注解@Component注解可以实现组建扫描 @Component public class A{ ... } 2.自动装配 通过在属性上或者方法上添加@Autowired注解 ...
- Linux上安装nodejs
https://github.com/nodejs/node-v0.x-archive/wiki/Installing-Node.js-via-package-manager#debian-and-u ...