博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOI2015]程序自动分析
阅读量:6577 次
发布时间:2019-06-24

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

★☆   输入文件:prog.in   输出文件:prog.out   简单对比

时间限制:2 s   内存限制:512 MB

【题目描述】

在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。

考虑一个约束满足问题的简化版本:假设x1,x2,x3,...xn代表程序中出现的变量,给定n个形如xi=xj或者xixj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述条件同时被满足。

【输入格式】

输入文件第一行包含一个正整数T,表示需要判定的问题个数。注意这些问题之间相互独立。

对于每个问题,包含若干行:

第一行一个正整数n,表示约束条件个数。

接下来n行,每行三个正整数i,j,e,描述一个相等/不等的约束条件。若e=1,则约束条件为xi=xj,若e=0,则约束条件为xixj

【输出格式】

输出文件包括T行。

输出文件的第k行输出一个字符串"YES"或者"NO"(不包含引号,字母全部大写).

【样例输入1】

221 2 11 2 021 2 12 1 1

【样例输出1】

NOYES

【样例输入2】

2

3

1 2 1

2 3 1

3 1 1

4

1 2 1

2 3 1

3 4 1

1 4 0

【样例输出2】

YES

NO

数据规模

1<=T<=10

对于1,2:1<=n<10

对于3,4:10<n<=100

对于5,6,7:100<n<=100,000

对于8,9,10:100<n<=100,000

对于前70%的数据:1<=i,j<=10,000

对于100%的数据:1<=i,j<=1,000,000,000

【来源】

NOI2015

思路

hash+并查集

代码实现

1     #include
2 #include
3 #include
4 using namespace std; 5 const int maxn=3e6; 6 const int mod=2999957; 7 int test,n,ans; 8 int a,b,c; 9 int f[maxn];10 struct question{
int a,b,c;}q[maxn];11 int hash(int a){12 int ha=1;13 while(a){14 ha*=a;15 ha%=mod;16 a/=10;17 }18 return ha;19 }20 int find(int x){
return f[x]==x?x:f[x]=find(f[x]);}21 bool comp(const question&x,const question&y){
return x.c>y.c;}22 int main(){23 freopen("prog.in","r",stdin);24 freopen("prog.out","w",stdout);25 scanf("%d",&test);26 while(test--){27 memset(f,0,sizeof(f));28 ans=1;29 scanf("%d",&n);30 for(int i=1;i<=n;i++){31 scanf("%d%d%d",&a,&b,&c);32 q[i]=(question){hash(a),hash(b),c};33 }34 sort(q+1,q+n+1,comp);35 for(int i=1;i<=n;i++){36 a=q[i].a,b=q[i].b;37 if(!f[a]) f[a]=a;38 if(!f[b]) f[b]=b;39 a=find(a),b=find(b);40 if(q[i].c) f[b]=a;41 else if(a==b) ans=0;42 if(!ans) break;43 }44 if(ans) puts("YES");45 else puts("NO");46 }47 return 0;48 }

单模居然没W;

因为忘了写find_f的修正路径,差点降低本题通过率。。。

NOI2015

转载于:https://www.cnblogs.com/J-william/p/7202853.html

你可能感兴趣的文章
c++ try throw catch
查看>>
Python编程系列教程第14讲——继承
查看>>
安利一款基于element的大数据树形表格
查看>>
git log
查看>>
Mint UI 使用采坑记
查看>>
数据库下载_Office下载
查看>>
leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)
查看>>
字符串分割函数(New)
查看>>
第一阶段:前端开发_使用JS完成注册页面表单校验
查看>>
深入了解JavaScript对象(1)--原始类型和引用类型
查看>>
mybatis中动态SQL之trim详解
查看>>
SDN第5次上机作业
查看>>
响应式布局
查看>>
第六周项目4-成员函数、友元函数和一般函数有区别
查看>>
小试牛刀C#作为脚本语言执行解密
查看>>
Intellij创建简单Springboot项目
查看>>
编译升级php之路(5.5.7 到 5.5.37)
查看>>
31. ExtJs4回车事件监听
查看>>
ClassLoader.getResourceAsStream(name);获取配置文件的方法
查看>>
java 类加载器
查看>>