HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
2015-10-04 03:22
309 查看
这题智商低,想了很久没有想到怎么做,其实想通了很简单,由于俩个数列都是1~n的排列,
所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,
而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。
总有那么些巧妙地题是我这种智商低的想不到的。
所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,
而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。
总有那么些巧妙地题是我这种智商低的想不到的。
#include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<algorithm> #include<iostream> #include<set> #define LL long long using namespace std; const int N=1e5+10; int a ,b ,c ; bool bo ; int main() { int t; cin>>t; while(t--) { int n; cin>>n; memset(bo,0,sizeof(bo)); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) { scanf("%d",&b[i]); c[a[i]]=b[i]; } int ans=n; for(int i=1;i<=n;i++) { if(!bo[i]) { int x=i; if(c[x]!=x) ans--; while(!bo[x]) { bo[x]=1; x=c[x]; } } } cout<<ans<<endl; } return 0; }
相关文章推荐
- 6.Python深入_内存管理
- HDU 5492 Find a path(DP)
- hdu 5495 LCS 水题
- libcocos2dx.a 出错解决。
- 有一种板刷poj的冲动
- 用imagebox控件实现多种视频播放功能,并且帧图片可供后续处理
- 基于python3,抓取韩寒博客文章
- 10款免费且开源的项目管理工具
- 10款免费且开源的项目管理工具
- 九个合理的个人所得税避税方案
- 九个合理的个人所得税避税方案
- Vim 自动补全插件 YouCompleteMe 安装与配置
- Win7安装python第三方模块objgraph报错<UnicodeEncodeError: 'ascii' codec can't encode character u'\u258f'>
- JDBC编程 之 增删改查
- .NET4.0,C#泛型接口的协变与抗变
- Hibernate5 demo
- Hibernate5 demo
- ,,,,,ddfd
- Maximum Subsequence Sum(With C)
- ViewPage实现Tab 底部导航 (如微信,微票儿主界面)