cf 1100E E. Andrew and Taxi (二分+拓扑排序)

二分花费,保证大于的不成环,然后拓扑排序,保证连边的单向

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int n,m;
struct node
{
    int u,v,c,id;
}itm[100005];

vectore[100005];
int c[100005];
int vis[100005];
int fail;
void dfs1(int u,int f)
{
    if(fail==1)
        return;

    vis[u]=1;
    int len=e[u].size();
    for(int i=0;ians;

int in[100005];

int sid[100005];

int main() {

    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<=100000;i++)
            e[i].clear(),vis[i]=0,in[i]=0;

        ans.clear();
        c[0]=0;
        for(int i=0;i q;
        for(int i=0;ic[ans1])
            {
                in[itm[i].v]++;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(in[i]==0)
                q.push(i);
        }

        int cnt=0;
        while(!q.empty())
        {
            int cur=q.front();
            q.pop();
            sid[cur]=cnt++;
            int len=e[cur].size();
            for(int i=0;ic[ans1])
                {
                    in[e[cur][i].v]--;
                    if(in[e[cur][i].v]==0)
                        q.push(e[cur][i].v);
                }
            }
        }

        for(int i=0;isid[itm[i].v])
                    ans2++,ans.push_back(itm[i].id);
            }
        }
        printf("%d %d\n",c[ans1],ans2);
        int len=ans.size();
        for(int i=0;i

 

你可能感兴趣的:(cf 1100E E. Andrew and Taxi (二分+拓扑排序))