博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOI2018模拟5】三角剖分Bsh
阅读量:5997 次
发布时间:2019-06-20

本文共 2130 字,大约阅读时间需要 7 分钟。

【NOI2018模拟5】三角剖分Bsh

Description

  给定一个正 n 边形及其三角剖分,共 2n - 3 条边 (n条多边形的边和n-3 条对角线),每条边的长度为 1。

  共 q 次询问,每次询问给定两个点,求它们的最短距离。

Input

  第一行一个整数 n ,表示多边形的点数;

  接下来 n - 3 行,每行两个整数 ui,vi,表示一条 ai 和 bi 之间的对角线;
  接下来一行一个整数 q,表示询问个数;
  接下来 q 行,每行两个整数 xi,yi,表示第 i 次询问的起点和终点;

Output

  对于每一个询问输出一个整数,表示答案。

Sample Input

6

1 5
2 4
5 2
5
1 3
2 5
3 4
6 3
6 6

Sample Output

2

1
1
3
0

\(n\leq 52000,1\leq q\leq 2n\)

因为这是个平面图,我们发现,选取一条边之后可以将图分为两个部分,两个部分之间的最短路一定经过了这条边的两个端点中至少一个。

又因为这是三角剖分,所以我们可以找到中间点使得左右两边的点数非常接近。所以我们可以分治。

代码:

#include
#define ll long long#define N 150000using namespace std;inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}int n,m;struct road { int to,nxt;}s[N<<1];int h[N],cnt;void add(int i,int j) {s[++cnt]=(road) {j,h[i]};h[i]=cnt;}#define pr pair
#define mp(a,b) make_pair(a,b)bool vis[N];int dis1[N],dis2[N];queue
q;void bfs(int S,int *dis) { q.push(S); dis[S]=0; while(!q.empty()) { int v=q.front(); q.pop(); for(int i=h[v];i;i=s[i].nxt) { int to=s[i].to; if(!vis[to]) continue ; if(dis[to]>1e9) { dis[to]=dis[v]+1; q.push(to); } } }}struct query {int x,y,id;};int pre[N];int ans[N];int tag1[N],tag2[N];int tim;void solve(vector
V,vector
E,vector
Q) { if(!Q.size()) return ; if(V.size()==3) { for(int i=0;i
>1; for(int i=0;i
v1,v2; vector
e1,e2; vector
q1,q2; v1.clear(),e1.clear(),q1.clear(); v2.clear(),e2.clear(),q2.clear(); for(int i=0;i
=Y||V[i]<=X) tag2[V[i]]=1; } for(int i=0;i
V;vector
E;vector
Q;int main() { n=Get(); for(int i=1;i
y) swap(x,y); E.push_back(mp(x,y)); } memset(ans,0x3f,sizeof(ans)); for(int i=1;i<=n;i++) V.push_back(i); m=Get(); for(int i=1;i<=m;i++) { int x=Get(),y=Get(); if(x>y) swap(x,y); Q.push_back((query) {x,y,i}); } solve(V,E,Q); for(int i=1;i<=m;i++) cout<
<<"\n"; return 0;}

转载于:https://www.cnblogs.com/hchhch233/p/10601102.html

你可能感兴趣的文章
ceph安装过程
查看>>
BT5启动SSH服务
查看>>
在IDEA中实战Git
查看>>
1.2指令系统
查看>>
duplicate MIME type "text/html" in nginx.conf的根源
查看>>
我的友情链接
查看>>
Wrong permissions on configuration file, should not be world writable
查看>>
正则表达式之Grep
查看>>
跟小博老师一起学Servlet ——Servlet之客户端跳转
查看>>
Activity加载模式
查看>>
计算机基础学习--硬件和系统
查看>>
Cgrop IOPS 控制(blkio)
查看>>
使用kvm 制作openstack windows镜像
查看>>
js关键字
查看>>
EIGRP(Enhanced Interior Gateway Routing Protocol) 增强网关内部路由线路协议O2
查看>>
《疯狂java讲义2》读书笔记——数组
查看>>
删除qq的记录,主要是针对图片缓存文件
查看>>
开始了:Ubuntu MATE 18.10将降低对32位安装支持
查看>>
RIP
查看>>
PHP爱好者请坚定你们的信念!
查看>>