洛谷:P2853 [USACO06DEC]Cow Picnic S(图,普及/提高-,)

题目:

洛谷:P2853 [USACO06DEC]Cow Picnic S(图,普及/提高-,)_第1张图片

分析:

而且不存在起点和终点相同的有向路:意思是不存在环?对。

那就太简单了吧,hhh。

就是一个稍加修改的拓扑排序+dp。

直接转移,这样的情况会有重复:

洛谷:P2853 [USACO06DEC]Cow Picnic S(图,普及/提高-,)_第2张图片

改为出队列时,统计个数。

代码:为什么有问题呢?

#include
using namespace std;
int A[1050];//哪些位置上有牛
int cnt[1050];
int m1,m2,m3;
vector<vector<int> > vv;
int D[1050];
int xx;
int cc=0;
void f()
{
 queue<int> q;
 for(int i=1;i<=m2;i++)
 {
  if(cnt[i]==0) 
  {
   q.push(i);
  }
 }
 while(!q.empty())
 {
  int c=q.front();
  q.pop();
  if(A[c]==1) cc++;
  if(cc==m1)
  {
   xx=c;return;
  }
  for(int i=0;i<vv[c].size();i++)
  {
   //点为 : vv[c][i] 
   cnt[vv[c][i]]--; 
   D[vv[c][i]]=max(D[vv[c][i]],D[c]);
   if(cnt[vv[c][i]]==0) q.push(vv[c][i]);
  }
 }
}
int dfs(int x)
{
 if(A[x]==1) return 0;
 A[x]=1;
 int sum=1;
 for(int i=0;i<vv[x].size();i++)
 {
  sum+=dfs(vv[x][i]);
 }
 return sum;
}
int main()
{
 cin>>m1>>m2>>m3;
 memset(A,0,sizeof(A));//1有  0无
 memset(cnt,0,sizeof(cnt));
 memset(D,0,sizeof(D));
 vector<int> v;
 for(int i=0;i<=m2;i++) vv.push_back(v);
 for(int i=0;i<m1;i++)
 {
  int c;
  cin>>c;
  A[c]=1;
 }
 for(int i=0;i<m3;i++)
 {
  int a,b;
  cin>>a>>b;
  cnt[b]++;
  vv[a].push_back(b);
 }
 f();
 memset(A,0,sizeof(A));
 cout<<dfs(xx);
 } 

看题解:每个牛进行一个dfs,然后统计个数即可。。。。很不错的思路。啊啊啊!!!

还没我的高效呢!

代码:很好写,我哭了。

#include
using namespace std;
int A[1050];//哪些位置上有牛
int cnt[1050];
int m1,m2,m3;
vector<vector<int> > vv;
int D[1050];
void dfs(int x)
{
 if(A[x]==1) return;
 D[x]++;
 A[x]=1;
 for(int i=0;i<vv[x].size();i++)
 {
  dfs(vv[x][i]);
 }
}
int main()
{
 cin>>m1>>m2>>m3;
 memset(A,0,sizeof(A));//1有  0无
 memset(cnt,0,sizeof(cnt));
 memset(D,0,sizeof(D));
 vector<int> v;
 for(int i=0;i<=m2;i++) vv.push_back(v);
 for(int i=0;i<m1;i++)
 {
  int c;
  cin>>c;
  v.push_back(c);
 }
 for(int i=0;i<m3;i++)
 {
  int a,b;
  cin>>a>>b;
  cnt[b]++;
  vv[a].push_back(b);
 }
 for(int i=0;i<v.size();i++)
 {
  memset(A,0,sizeof(A));
  dfs(v[i]);
 }
 int ss=0;
 for(int i=0;i<=m2;i++)
 {
  if(D[i]==m1) ss++;
 }
 cout<<ss;
 } 

你可能感兴趣的:(我认为的精华,图)