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测试-图论的更多相关文章

  1. ACM-ICPC实验室20.2.21测试-图论(二)

    A.患者的编号 给出一个有向图,要求你输出字典序最小的拓扑排序. 常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~ #include< ...

  2. 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)D 不定方程

    题目链接:https://ac.nowcoder.com/acm/contest/2720/D 题意:对于 ax = by = c ,给出 x, y 求符合条件的 a, b, c 且 c 为最小的解, ...

  3. ACM-ICPC实验室20.2.22测试-动态规划

    C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...

  4. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  5. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online

    网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...

  6. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  7. 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 ...

  8. 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 ...

  9. Java in ACM/ICPC

    目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...

随机推荐

  1. 理解JWT(JSON Web Token)认证

    理解JWT(JSON Web Token)认证 最近想做个小程序,需要用到授权认证流程.以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式 ...

  2. decimal与float和double的区别

    一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 Name CTS Type De script ion Significan ...

  3. PyCharm专业版2019.3.2激活码到期2089年!!!

    Pycharm是一款很好用的python开发工具,开发Python爬虫和Python web方面都很不错 这里我为大家提供了pycharm激活方式2089年(都支持PyCharm20 激活步骤如下: ...

  4. c#中的位运算

    &与  全为1才是1 |或  全为0才是0 !非  两边相同时为1,不同时为0 ~取反  0变1,1变0,包括符号位 >>右移 溢出舍掉,正数补0,负数补1,移动n位:原数 / 2 ...

  5. codeforces 1282B2. K for the Price of One (Hard Version) (dp)

    链接 https://codeforces.com/contest/1282/problem/B2 题意: 商店买东西,商店有n个物品,每个物品有自己的价格,商店有个优惠活动,当你买恰好k个东西时可以 ...

  6. Centos7下配置Apache的虚拟主机

    一.虚拟主机 虚拟主机是Apache提供的一个功能,通过虚拟主机拉雅在一台服务器上部署多个网站.虽然服务器的IP地址是相同的,但用户当用户使用不同的域名访问时,访问到的是不同的网站. 下面讲解Apac ...

  7. 关于jquery绑定事件执行两次

    经常会出现jquery绑定事件执行两次的情况,如: $("a[tag=slide]").click(function () { alert(1); $(this).parent() ...

  8. python之路之html

    def index(request): print request.POST print request.GET print request.FILES for item in request.FIL ...

  9. 【译】写个好的 CLI 程序

    写个好的 CLI 程序 Write a Good CLI Program 译文 原文链接:https://qiita.com/tigercosmos/items/678f39b1209e60843cc ...

  10. L2-3 名人堂与代金券

    题解 这题的话,每一个人都要占一个排名,即使排名并列了. 对于最后一个排名来说,即使人数超过了指定的k,也要加入. 代码 #include <bits/stdc++.h> using na ...