wust oj 1318 区间的连通性(贪心)

[ Submit][ Status][ Web Board]

Description

题目包含多组数据,你有一个集合,该集合的元素为形如(x,y)的区间,两个区间1:(a,b)、2:(c,d),如果c<a<d 或者 c<b<d说明1号区间能到达2号区间,当然如果2号区间能到3号区间的话,那么1号区间也能到达3号区间。(该性质具有传递性)
现在给你n个操作,操作分为两种:
1.“1 x y”(x<y),将区间加入集合中。(区间按照加入的顺序编号)
2.“2 a b”(a!=b),问你第a个区间能否到达第b个区间。

Input

首先是一个n(1<=n<=200),表示操作数,然后有n行,每行有三个数,代表一个操作。
输入保证数据都在10^9的范围内。

Output

第2种操作时,如果a能到达b,输出“YES”,否则输出“NO”(不带引号)。

Sample Input 

5
1 1 5
1 5 11
2 1 2
1 2 9
2 1 2

Sample Output

NO
YES

 【题解】  区间合并的题,不过不用线段树,普通的标记就可以,,详解见代码注释。


 【AC代码】

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int vis[205][205];

struct tree
{
    int a,b;
}node[205];

int main()
{
    int t,a,b,c;
    while(~scanf("%d",&t))
    {
        int k=1;
        memset(node,0,sizeof(node));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<t;++i)
        {
            scanf("%d%d%d",&a,&b,&c);

            if(a==1)
            {
                node[k].a=b;
                node[k].b=c;
                for(int j=1;j<k;++j)
                {
                    if(b>node[j].a && b<node[j].b || c>node[j].a && c<node[j].b)//如果区间b,c的端点有一个和其他区间相重叠  则可从这个区间到其他区间
                        vis[k][j]=1;//当前区间和j区间可达

                    if(b<node[j].a && c>node[j].a || b<node[j].b && c>node[j].b)//同上
                        vis[j][k]=1;
                }
                k++;
            }
            else
            {
                if(vis[b][c]) printf("YES\n");//若区间可达
                else
                {
                    for(int j=1;j<k;++j)
                    {
                        for(int h=1;h<k;++h)
                            for(int l=1;l<k;++l)
                              if(vis[h][j] && vis[j][l])//间接连通
                               vis[h][l]=1;//也可达
                    }
                    if(vis[b][c]) printf("YES\n");
                    else printf("NO\n");
                }
            }
        }
    }
    return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
线弹性本构模型描述了材料在弹性范围内的应力和应变关系。以下是一个简单的代码示例,展示了如何实现线弹性本构模型: ```python # 定义线弹性本构模型类 class LinearElasticModel: def __init__(self, youngs_modulus): self.youngs_modulus = youngs_modulus def calculate_stress(self, strain): return self.youngs_modulus * strain def calculate_strain(self, stress): return stress / self.youngs_modulus # 创建线弹性本构模型对象 elastic_model = LinearElasticModel(youngs_modulus=200e9) # 假设材料的弹性模量为200 GPa # 使用线弹性本构模型进行计算 strain = 0.001 # 应变值 stress = elastic_model.calculate_stress(strain) # 计算相应的应力 print("Stress:", stress) stress = 50e6 # 应力值 strain = elastic_model.calculate_strain(stress) # 计算相应的应变 print("Strain:", strain) ``` 在上述代码中,我们首先定义了一个名为 `LinearElasticModel` 的类,该类包含了弹性模量 `youngs_modulus` 和两个方法 `calculate_stress` 和 `calculate_strain`,分别用于计算应力和应变。 然后,我们创建了一个 `LinearElasticModel` 的实例 `elastic_model`,并传入材料的弹性模量。 最后,我们可以使用 `calculate_stress` 方法计算给定应变值的应力,或者使用 `calculate_strain` 方法计算给定应力值的应变。 这只是一个简单的示例,实际的线弹性本构模型可能涉及更复杂的计算和参数。具体的实现可能会根据所使用的编程语言和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值