POJ 2949 Word Rings(差分约束)
来源:互联网 发布:北京恩知教育 编辑:程序博客网 时间:2024/05/17 00:57
思路:找平均值最大的环,将字符串前两个和最后两个当做两个结点,有一条边权值就是这个串的长度。
那么avg = (w1+w2+....wk)/k,把k乘过去有avg*k = (w1+w2+...wk),然后有(w1-avg)+(w2-avg)+...(wk-avg)>=0,然后其实就是要求(w1-ans)+(w2-ans)+...(wk-ans)>0,二分ans然后求正环。
用DFS找环会比BFS快上不少...另外这个题用hash比用map会快很多...
#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<vector>#include<map>#include<algorithm>#include<queue>using namespace std;const int maxn = 100000+5;vector<pair<int,int> >e[maxn];map<string,int>mp;double d[maxn];int inq[maxn],cnt,n;bool dfs(int u,double avg){ inq[u]=1;for(int i = 0;i<e[u].size();i++){int v = e[u][i].first;if(d[v]<d[u]+e[u][i].second-avg){d[v]=d[u]+e[u][i].second-avg;if(inq[v]||dfs(v,avg))return true;}}inq[u]=0;return false;}bool check(double avg){memset(d,0,sizeof(d));memset(inq,0,sizeof(inq));for(int i = 1;i<=n;i++)if(dfs(i,avg))return true;return false;}int main(){ while(scanf("%d",&n)!=EOF && n){for(int i=0;i<=n;i++)e[i].clear();//mp.clear();string s;cnt=1;for(int i = 0;i<n;i++){string tmp=""; cin >> s;tmp+=s[0];tmp+=s[1]; if(!mp.count(tmp))mp[tmp]=cnt++;string tmp1="";tmp1+=s[s.size()-2];tmp1+=s[s.size()-1];if(!mp.count(tmp1))mp[tmp1]=cnt++; e[mp[tmp]].push_back(make_pair(mp[tmp1],s.size()));}n = mp.size();double ans = -1;double l = 0,r=1000;for(int i = 0;i<100;i++){double mid = (l+r)/2;if(check(mid))l=mid,ans=mid;elser=mid;}if(ans==-1)printf("No solution.\n");elseprintf("%.2f\n",ans);}}
0 0
- POJ 2949 Word Rings(差分约束)
- poj 2949Word Rings
- poj 1201 Intervals(差分约束)
- POJ 3195 Candies (差分约束)
- poj 2983(差分约束)
- POJ 1716 (差分约束)
- POJ 1201 (差分约束)
- POJ 1201 Intervals(差分约束)
- POJ 1364 King (差分约束)
- poj 1201 Intervals (差分约束)
- poj 1364(差分约束-bellmanford)
- poj 3169 Layout(差分约束)
- poj 3169 Layout(差分约束)
- poj 1201 Intervals(差分约束)
- poj 3159 Candies(差分约束)
- POJ 1201 (差分约束)
- POJ 2983 (差分约束)
- POJ 3169 Layout (差分约束)
- HDOJ 1004 Let the Balloon Rise
- http 之session和cookie
- 字符串排序
- 本地化处理
- 各种分布的python例子
- POJ 2949 Word Rings(差分约束)
- Linux之分区
- pom中引入新依赖项后项目启动报错问题研究
- 2033 人见人爱A+B
- QStringList的简单使用方法
- 字符串 KMP POJ 2406
- 101条计算机名言
- 数据库相关
- cell 的定义