public void distribute(Service provided[]) {
    final Batch <Batch <Venue>> allReached = new Batch <Batch <Venue>> () ;
    //
    //  First, divide the set of all venues into discrete partitions based on
    //  mutual paving connections-
    final Tile at = world.tileAt(0, 0) ;
    for (Object o : world.presences.matchesNear(Venue.class, at, -1)) {
      final Batch <Venue> reached = venuesReached((Venue) o) ;
      if (reached != null) allReached.add(reached) ;
    }
    //
    //  Then, distribute water/power/et cetera within that area-
    for (Batch <Venue> reached : allReached) {
      distributeTo(reached, provided) ;
      for (Venue v : reached) v.flagWith(null) ;
    }
  }